

ui:repeatで作成したテーブル行について、行追加を行いたいのですが、  
とすると、  
行は追加されますが、テーブル全体が再描画されるため、入力中の値が消えてしまいます。  
※テーブルはjqueryのdatatableを使用しています。

MnagedBeanでリストに行を追加し、HTML上のテーブルに行追加のみを行い、  
ほかの行は変更再描画させないようにするには、どのように実現できるのでしょうか。  
どうしてもわからず困っています。  
ご教授頂ければ幸いです。


CC BY-SA 3.0
2018-04-25T14:27:43.677
43553
2018-04-26T07:05:16.307
2018-04-25T14:55:09.347
19110
28313
question
ajax jsf
ui:repeatで作成したテーブル行について、f:ajax「追加」ボタン押下で行追加


見てくださってありがとうございます。すみません、お願いいたします。

[code]

    <table jsf:id="tableid">
        <thead>
            <tr>
                <th>AAA</th>
                <th>BBB</th>
                <th>CCC</th>
            </tr>
        </thead>
        <tbody jsf:id="tbodyid">
            <ui:repeat id="repeatid" varStatus="sts" var="record" value="#{XXXXBean.dataList}" >
                <tr jsf:id="trid">
                    <td>
                        <input type="text"   jsf:value="#{record.aaa}"    jsf:id="recordaaa" />
                    </td>
                    <td>
                        <input type="text"   jsf:value="#{record.bbb}"    jsf:id="recordbbb" />
                    </td>
                    <td>
                        <input type="text"   jsf:value="#{record.ccc}"    jsf:id="recordccc" />
                    </td>
                </tr>
            </ui:repeat>
        </tbody>
    </table>
    
    <f:ajax execute="@this" listener="#{XXXXBean.addRow}" render="tbodyid" >
        <h:commandButton id="addbtn" value="addbtn"/>
    </f:ajax>
    
[/code]

****XXXXBean.java***********************************************************************

[code]

    @Named("XXXXBean")
    @SessionScoped
    public class XXXXBean extends BaseBean {
        private List<dataListBean> dataList = null;
    
        //初期表示処理
        @PostConstruct
        public void init() {
            //一行だけ追加しておく
            dataList = new ArrayList<>();
            dataList.add(new dataListBean());
            dataList.get(0).setAaa(1);
            dataList.get(0).setBbb(1);
            dataList.get(0).setCcc(1);
        }
    
        //行追加
        public void addRow() {
            dataList.add(new dataListBean());
        }
    
        public List<dataListBean> getDataList() {
            return dataList;
        }
    
        public void setDataList(List<dataListBean> dataList) {
            this.dataList = dataList;
        }
    }
    
[/code]

****dataListBean.java***********************************************************************

[code]

    public class dataListBean {
        private int aaa;
        private int bbb;
        private int ccc;
    
        public int getAaa() {
            return aaa;
        }
        public void setAaa(int aaa) {
            this.aaa = aaa;
        }
        public int getBbb() {
            return bbb;
        }
        public void setBbb(int bbb) {
            this.bbb = bbb;
        }
        public int getCcc() {
            return ccc;
        }
        public void setCcc(int ccc) {
            this.ccc = ccc;
        }
    }
    
[/code]


CC BY-SA 3.0
2018-04-26T07:05:16.307
43564
2018-04-26T07:05:16.307
28313
43553
answer