Jsf 对话框的“保存”按钮未激活bean方法
我试图通过使用从数据表加载行数据的对话框来实现编辑功能。我可以将数据表中的人员详细信息加载到对话框中,并相应地显示保存按钮。但是我的save按钮没有启动我的bean方法来保存对话框中更新的记录。我可能会遗漏什么,这是我的代码Jsf 对话框的“保存”按钮未激活bean方法,jsf,jsf-2,primefaces,dialog,Jsf,Jsf 2,Primefaces,Dialog,我试图通过使用从数据表加载行数据的对话框来实现编辑功能。我可以将数据表中的人员详细信息加载到对话框中,并相应地显示保存按钮。但是我的save按钮没有启动我的bean方法来保存对话框中更新的记录。我可能会遗漏什么,这是我的代码 .xhtml文件 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:p="http://primefaces.org/u
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<title>Asset Manager-Home</title>
</h:head>
<h:body>
<p:layout fullPage="true">
<p:layoutUnit position="north" size="200">
<h:outputText value="Home content." />
</p:layoutUnit>
<p:layoutUnit position="south" size="50">
<h:outputText value="All Rights Reserved." />
</p:layoutUnit>
<p:layoutUnit position="west" size="250" header="">
<h:form>
<p:panelMenu>
<p:submenu label="Home">
<p:menuitem value="Home" url="/faces/index.xhtml" />
</p:submenu>
<p:submenu label="Staff">
<p:menuitem value="Create Staff " url="/face/createStaff.xhtml" icon="ui-icon-disk" />
<p:menuitem value="Update Staff " url="/faces/updateStaff.xhtml" />
<p:menuitem value="All Staff " url="/faces/updateStaff.xhtml" />
</p:submenu>
<p:submenu label="Categories">
<p:menuitem value="Create Category" url="/faces/createCategory.xhtml" icon="ui-icon-disk" />
<p:menuitem value="Update Category" url="/faces/updateCategory.xhtml" />
<p:menuitem value="View Category" url="/faces/updateCategory.xhtml" />
</p:submenu>
<p:submenu label="Asset">
<p:menuitem value="Create Asset" url="/faces/createAsset.xhtml" icon="ui-icon-disk" />
<p:menuitem value="Update Asset" url="/faces/updateAsset.xhtml" />
<p:menuitem value="All Asset" url="/faces/updateAsset.xhtml" />
</p:submenu>
<p:submenu label="Asset Status">
<p:menuitem value="Create/Update Status Register" url="/faces/CreateStatus.xhtml" />
</p:submenu>
<p:submenu label="Assigned Asset">
<p:menuitem value="Assign Asset" url="/faces/assignAsset.xhtml" icon="ui-icon-disk" />
<p:menuitem value="Do Update" url="/faces/updateAssignAsset.xhtml" />
<p:menuitem value="View All" url="/faces/updateAssignAsset.xhtml" />
</p:submenu>
<p:submenu label="Reports">
</p:submenu>
</p:panelMenu>
</h:form>
</p:layoutUnit>
<p:layoutUnit position="east" size="250" header="Right">
<h:outputText value="Right unit content." />
</p:layoutUnit>
<p:layoutUnit position="center">
<p:separator id="customSeparator" style="width:1000px;height:20px" />
<p:panel header="All Staff" id="allstaff">
<h:form prependId="false" id="staffform">
<p:dataTable id="dataTable" var="stf" value="#{allStaffTableBean.staffList}"
paginator="true" rows="10"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15" selectionMode="single"
selection="#{allStaffTableBean.selectedStaff}"
emptyMessage="KoblaGasu:: No data to be found for displaying"
rowKey="#{stf.uniqueID}">
<p:column sortBy="#{stf.uniqueID}" filterBy="#{stf.uniqueID}">
<f:facet name="header">
<h:outputText value="Staff ID" />
</f:facet>
<h:outputText value="#{stf.uniqueID}" />
</p:column>
<p:column sortBy="#{stf.firstName}" filterBy="#{stf.firstName}">
<f:facet name="header">
<h:outputText value="First Name" />
</f:facet>
<h:outputText value="#{stf.firstName}" />
</p:column>
<p:column sortBy="#{stf.lastName}" filterBy="#{stf.lastName}">
<f:facet name="header">
<h:outputText value="Last Name" />
</f:facet>
<h:outputText value="#{stf.lastName}" />
</p:column>
<f:facet name="footer">
<div>
<p:commandButton id="edit" value="Edit" update=":staffform:display" onclick="PF('StaffEditDialog').show()" />
<p:commandButton id="delet" value="Delete" />
</div>
</f:facet>
</p:dataTable>
<p:dialog id="StaffEditDlg" widgetVar="StaffEditDialog" modal="true" resizable="false" appendTo="@(body)" header="Edit Staff" closeOnEscape="true">
<h:panelGroup id="display">
<p:panelGrid columns="2" rendered="#{allStaffTableBean.selectedStaff != null}">
<h:outputLabel value="Staff ID" for="staffUniqueID" />
<h:outputText id="staffUniqueID" value="#{allStaffTableBean.selectedStaff.uniqueID}" />
<p:outputLabel value="First Name" for="firstName" />
<p:inputText id="firstName" value="#{allStaffTableBean.selectedStaff.firstName}" title="First Name" size="45" maxlength="45" />
<p:outputLabel value="Last Name" for="lastName" />
<p:inputText id="lastName" value="#{allStaffTableBean.selectedStaff.lastName}" title="Last Name" size="45" maxlength="45" />
</p:panelGrid>
<p:commandButton actionListener="#{allStaffTableBean.update}" value="Save" oncomplete="PF().hide();" />
<p:commandButton value="Cancel" onclick="StaffEditDialog.hide()" />
</h:panelGroup>
</p:dialog>
</h:form>
</p:panel>
</p:layoutUnit>
</p:layout>
</h:body>
</html>
public class AllStaffTableBean implements Serializable
{
private List<Staff> staffList;
private Staff selectedStaff;
/**
* Creates a new instance of AllStaffTableBean
*/
public AllStaffTableBean()
{
staffList = new ArrayList<>();
staffList = new StaffManager().getAllStaff();
for(Staff stf : staffList)
{
System.out.println("allstafftablebean:: " + stf);
}
{
System.out.println("selectedStaff :: " + selectedStaff);
}
}
public void update(ActionEvent event)
{
RequestContext context = RequestContext.getCurrentInstance();
new StaffManager().saveStaff(selectedStaff.getUniqueID(), selectedStaff.getFirstName(), selectedStaff.getLastName());
System.out.println("Update callded in allstafftablebean.java :: " + selectedStaff);
}
/**
* @return the staffList
*/
public List<Staff> getStaffList()
{
return staffList;
}
/**
* @return the selectedStaff
*/
public Staff getSelectedStaff()
{
return selectedStaff;
}
/**
* @param selectedStaff
* the selectedStaff to set
*/
public void setSelectedStaff(Staff selectedStaff)
{
this.selectedStaff = selectedStaff;
}
}
公共类AllStaffTableBean实现可序列化
{
私人名单;
私人员工选择员工;
/**
*创建AllStaffTableBean的新实例
*/
public AllStaffTableBean()
{
staffList=newarraylist();
staffList=newstaffmanager().getAllStaff();
员工(stf:staffList)
{
System.out.println(“allstafftablebean::”+stf);
}
{
System.out.println(“selectedStaff::”+selectedStaff);
}
}
公共无效更新(ActionEvent事件)
{
RequestContext=RequestContext.getCurrentInstance();
新建StaffManager().saveStaff(selectedStaff.getUniqueID()、selectedStaff.getFirstName()、selectedStaff.getLastName());
System.out.println(“在allstafftablebean.java中调用的更新::”+selectedStaff);
}
/**
*@returnthestafflist
*/
公共列表getStaffList()
{
返回staffList;
}
/**
*@返回所选的Staff
*/
公职人员getSelectedStaff()
{
返回所选员工;
}
/**
*@param selectedStaff
*要设置的选定人员
*/
公共无效设置选定员工(员工选定员工)
{
this.selectedStaff=selectedStaff;
}
}
您必须告诉commandButton要处理什么,请尝试:
<p:commandButton actionListener
="#{allStaffTableBean.update}" value="Save" oncomplete="PF().hide();"
process="@this,StaffEditDlg"/>
或:
要处理对话框中的数据,必须处理数据表信息(选定项),以便:
我建议使用另一个Staff实例进行编辑,请记住,实例只是引用,因此如果您更改该值(出于任何原因),将更新为所有具有该引用的变量,请查找Shadow clone或deep clone。我想用这些代码会有用的。如果没有,请添加注释
玩得开心 下次使用代码时,请格式化它!;)感谢BalusC,我希望按钮现在能够在bean中启动更新方法,但是对话框中编辑的数据没有被捕获。在我看来,bean捕获的数据似乎是数据表中的选定行,而不是对话框中的数据。这可能是因为对话框和数据表的形式相同吗?试着把对话框放在layout和layoutUnit之外。忘记我发表的评论吧,嗯,这很奇怪。我会在晚上下班后尝试复制。你对primefaces的看法是什么?
<p:commandButton actionListener
="#{allStaffTableBean.update}" value="Save" oncomplete="PF().hide();"
process="@this,StaffEditDlg"/>
<p:commandButton actionListener
="#{allStaffTableBean.update}" value="Save" oncomplete="PF().hide();"
process="@this,@widgetVar(StaffEditDialog)"/>
<p:commandButton id="edit" value="Edit" update=":staffform:display"
onclick="PF('StaffEditDialog').show()" process=":staffform:dataTable" />