0

シンプルなJSFページとシンプルなバッキングBeanがあります。ページにp:commandButtonとp:datatableがあります。commandButtonを使用して、データテーブルをajaxで更新する必要がありますが、それは起こりません。理由は何でしょうか?

これがページです:

<ui:define name="content">
        <h2>#{menu['management.roles.perms']}</h2>

        <h:form id="form">
            <p:fieldset style="border: 0px" toggleable="false" collapsed="false">
                <p:tabView>
                    <p:tab title="#{messages['roles']}">
                         <p:dataTable id="dataTable" value="#{rolesBean.roles}" var="role"
                                      editable="true" rows="10" rowKey="#{role.id}">

                             <p:ajax event="rowEdit" listener="#{rolesBean.onEdit}"/>
                             <f:facet name="footer">
                                 <p:commandButton value="#{misc['add.role']}"
                                                  actionListener="#{rolesBean.addRole}" update="dataTable"/>
                             </f:facet>
                             <p:column headerText="#{misc['name.database']}">
                                 <p:cellEditor>
                                     <f:facet name="output">
                                         <h:outputText value="#{role.name}"/>
                                     </f:facet>
                                     <f:facet name="input">
                                         <h:inputText value="#{role.name}"/>
                                     </f:facet>
                                 </p:cellEditor>
                             </p:column>

                             <p:column headerText="#{misc['date']}">
                                 <f:facet name="output">
                                     <h:outputText value="#{role.creationDate}">
                                         <f:convertDateTime pattern="dd.MM.yyyy" />
                                     </h:outputText>
                                 </f:facet>
                             </p:column>

                             <p:column headerText="#{misc['description']}">
                                 <p:cellEditor>
                                     <f:facet name="output">
                                         <h:outputText value="#{role.description}"/>
                                     </f:facet>
                                     <f:facet name="input">
                                         <h:inputText value="#{role.description}"/>
                                     </f:facet>
                                 </p:cellEditor>
                             </p:column>

                             <p:column headerText="#{messages['edit']}">
                                 <p:rowEditor />
                             </p:column>
                         </p:dataTable>
                    </p:tab>

                    <p:tab title="#{messages['perms']}">

                    </p:tab>

                    <p:tab title="#{clients['history']}">
                    </p:tab>
                </p:tabView>
            </p:fieldset>
        </h:form>
    </ui:define>

そして、これがbackingBeanのコードです。

@ViewScoped
@ManagedBean(name = "rolesBean")
public class RolesViewBean extends BasicViewBean<Role> {

    private static final long serialVersionUID = 27377603187254821L;
    @Inject
    RoleDao dao;
    private List<Role> roles;

    @Override
    protected BasicDao<Role> getDAO() {
        return dao;
    }

    public void onEdit(RowEditEvent event){
        this.entity = (Role) event.getObject();
        dao.update(this.entity);
    }

    public void addRole(){
        roles.add(new Role());
    }

    public List<Role> getRoles() {
        roles = dao.getRoleList();
        return roles;
    }

    public void setRoles(List<Role> roles) {
        this.roles = roles;
    }
} 
4

1 に答える 1

0

一見したところ、問題は、addRoleメソッドが「ロール」リストを変更し、getRoles(dataTableによって呼び出される)がデータベースに保存されているものにリセットすることです。つまり、データタブが更新されます。同じ値で更新されるだけです。

それについて考えてください;)

于 2012-12-10T11:59:06.657 に答える