【发布时间】:2011-12-08 01:46:49
【问题描述】:
我有下面的页面,一切正常...
除了我点击删除按钮并在确认对话框中点击“是的当然”后,我的页面没有改变......它应该向我显示没有该用户的相同表单。
我尝试了很多东西,但我使用的是 Primefaces 3.0.M3 我的表单表是服务器创建的,所以它应该是 ajax 可用的。
有人知道出了什么问题吗?
谢谢!
<h:form id="main" prependId="false">
<p:dataTable var="user" value="#{userController.allUsers}" id="userTable">
<p:ajax event="rowEdit" update="@this" listener="#{userController.onEditRow}" />
<f:facet name="header">
#{bundle.ListOfUsers}
</f:facet>
<p:column headerText="#{bundle.USERNAME}" style="width:110px">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{user.name}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{user.name}" style="width:110%"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="#{bundle.Login}" style="width:100px">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{user.login}" />
</f:facet>
<f:facet name="input">
<h:outputText value="#{user.login}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="#{bundle.Roles}" style="width:180px;">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{user.rolesCollection}"/>
</f:facet>
<f:facet name="input">
<p:selectManyMenu value="#{user.rolesCollection}"
converter="rolesConverter"
style=" width:100%;">
<f:selectItems value="#{roleController.listOfRoles}"
var="roles"
itemLabel="#{roles.rolename}"
itemValue="#{roles}"
/>
</p:selectManyMenu>
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="#{bundle.edit}" style="width:10px; overflow:visible;">
<p:rowEditor/>
</p:column>
<p:column headerText="#{bundle.delete}" style="width:10px; overflow:visible;">
<p:commandButton update=":main" oncomplete="confirmation.show()" image="ui-icon ui-icon-close" title="Delete" >
<f:param value="#{user.id}" name="userAction" />
</p:commandButton>
</p:column>
</p:dataTable>
<p:confirmDialog message="Are you sure? user:#{param['userAction']} " width="500"
header="Confirm" severity="alert" widgetVar="confirmation" >
<p:commandButton value="Yes sure" update="userTable" actionListener="#{userController.deleteAction( param['userAction'])}" oncomplete="confirmation.hide()" >
<f:param name="userAction" value="#{param['userAction']}" />
</p:commandButton>
<p:commandButton value="Not yet" onclick="confirmation.hide()" type="button" />
</p:confirmDialog>
</h:form>
这里是控制器方法
public void deleteAction(String id){
userFacade.remove(userFacade.find(Integer.parseInt(id)));
}
这个方法正在被调用,它正在删除用户。
【问题讨论】:
-
目前还不清楚究竟是哪一部分不工作。它会调用 action 方法吗?它是否返回预期的 ajax 响应?您是否在操作方法中重新加载列表?等等。
-
它正在删除用户所有方法都被调用,但是confirmDialog上CommandButton的更新标签什么也没做。如果我按 F5 并重新加载页面,我会得到没有删除用户的新表
-
没有在操作方法中重新加载列表......并且没有在方法上返回任何内容,我认为调用 DIV 进行刷新的更新会触发列表的重新加载。
-
那么,你不是在从数据库中删除用户后从数据库中重新加载
allUsers? -
需要吗?我要求更新 p:dataTable userTable,不应该这样做吗?
标签: java ajax jsf jsf-2 primefaces