PrimeFaces commandButton ajax不起作用

PrimeFaces commandButton ajax不起作用,ajax,primefaces,Ajax,Primefaces,我有简单的JSF页面和简单的支持bean。我在页面上有p:commandButton和p:datatable。使用commandButton,我需要用ajax更新dataTable,但这不会发生。原因可能是什么 以下是网页: <ui:define name="content"> <h2>#{menu['management.roles.perms']}</h2> <h:form id="form">

我有简单的JSF页面和简单的支持bean。我在页面上有p:commandButton和p:datatable。使用commandButton,我需要用ajax更新dataTable,但这不会发生。原因可能是什么

以下是网页:

<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>

#{menu['management.roles.perms']}
下面是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;
    }
} 
@ViewScoped
@ManagedBean(name=“rolesBean”)
公共类RolesViewBean扩展了BasicViewBean{
私有静态最终长serialVersionUID=27377603187254821L;
@注入
罗乐道道;
私有列表角色;
@凌驾
受保护的基本dao getDAO(){
返回道;
}
public void onEdit(RowEditEvent事件){
this.entity=(角色)event.getObject();
dao.update(this.entity);
}
public void addRole(){
添加(新角色());
}
公共列表getRoles(){
roles=dao.getRoleList();
返回角色;
}
public void setRoles(列出角色){
this.roles=角色;
}
} 

乍一看,问题在于addRole方法修改了“角色”列表,而getRoles(由dataTable调用)将其重置为数据库中保存的任何内容。 所以你的数据表被更新了,只是它被更新为相同的值


想想看;)

你说得对!tnx寻求帮助,但现在还有另一个问题。按下按钮时未执行addRole方法。可能是什么?