PrimeFaces commandButton ajax不起作用

时间:2012-12-10 11:20:34

标签: 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">
            <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;
    }
} 

1 个答案:

答案 0 :(得分:0)

乍一看,问题是你的addRole方法修改了“角色”列表,而getRoles(由dataTable调用)会将其重置为数据库中保存的内容。 因此,您的数据表会更新,只是它会使用相同的值进行更新。

想一想;)