所以我有4列的hava表。第4列有一个删除记录的按钮,当按钮被打开时,模态对话框打开然后它要求确认是(或)NO.So当我点击是的,记录从数据库中删除,并且模式dilog关闭,但表没有刷新。如果我手动刷新它,记录不会显示。
这是我在JSF中用于模态对话框的代码:
<p:dialog id="modalDialog" header="Delete User?" modal="true"
resizable="false" draggable="false" widgetVar="delUserConf">
<h:panelGrid id="display" columns="2">
<h:outputLabel value="Name" style="font-weight: bold"/>
<h:outputText value="#{userController.selectedBean.firstName}" style="border: none"/>
</h:panelGrid>
<p:commandButton oncomplete='delUserConf.hide();' actionListener="#{mybeanr.deleteUser(userController.selectedBean)}" id="yesDeleteUser" value="#{bundle.ListUserDeleteYes}" update=":userForm"/>
<p:commandButton id="noDelete" onclick="delUserConf.hide();" action="/views/user/UserManagement.xhtml" value="#{bundle.ListUserDeleteNo}" style="margin-left: 15px;" update=":userForm:dataTab"/>
</p:dialog>
其中'userForm'是表单的if。对话框按钮不在bean中的p:datatable.My代码中:
public String deleteUser(UserBean userbean) {
//do something
selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
if(//condiition checking )
{
JsfUtil.addErrorMessage("Not Allowed");
}
else
{
try {
//some logic here
JsfUtil.addSuccessMessage("Success");
} catch (Exception e) {
JsfUtil.addErrorMessage("Error");
}
//performDestroy();
recreatePagination();
recreateModel();
}
return "UserDetails";
}
数据表和表单代码:
<h:form id="userForm">
<p:growl id="growl" showDetail="true" sticky="true" />
<div class="dataTableWrap">
<p:dataTable value="#{mybean.usersList}" var="item" id="dataTab" widgetVar="usersTable" editable="true" rowKey="#{item.emailAddress}">
have some columns here and just displaying the values of these columns from the beans.
</p:datatable>
</h:form>
UserDetails是我有这个表的jsf页面。如果你注意到我从bean返回的消息很少。这个工作正常,但我不明白为什么表没有刷新。有人能让我知道为什么吗?
答案 0 :(得分:1)
您是否正在更新mybean.usersList?我不知道recreatePagination()和recreateModel()做了什么,但是,由于你没有使用惰性模型,尝试在执行destroy之后从列表中删除已删除的userbean。像
这样的东西public String deleteUser(UserBean userbean) {
//do something
selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
if(//condiition checking )
{
JsfUtil.addErrorMessage("Not Allowed");
}
else
{
try {
//some logic here
JsfUtil.addSuccessMessage("Success");
} catch (Exception e) {
JsfUtil.addErrorMessage("Error");
}
//performDestroy();
usersList.remove(userBean);
recreatePagination();
recreateModel();
}
return "UserDetails";
}
答案 1 :(得分:0)
当从jsf uifront端从实体中删除时,该实体不处于托管状态, 所以你需要合并回来获取托管对象,现在删除使用emcreateQuery(“”)来删除表中存在实体对象的地方,或者你可以从jsf ui执行geList()。remove(entity)。第一个选项从db中删除,立即刷新页面,第二个选项删除合并后的实体,并将其从ui列表中删除