我正在尝试帮助用户在提交表单上填写实体ID号码。我不能使用下拉,因为有1000个。
在PF对话框中,我可以将选定的值复制到主窗体,但我将actionaListener硬编码到commandLink中,告诉弹出对话框主窗体上的h:textInput框将值复制到和渲染。如果我有三个h:inputText框,那么我需要复制三个p:对话框。
例如在我的p:对话框中,我会在数据表中有一列:
<h:commandLink value="Select This Item" onclick="PF('dlg').hide()">
<f:ajax render=":myForm:text_field_1" event="click"
listener="#{bean.popDownId1(item.id)}" />
</h:commandLink>
如何将这些变量myForm:text_field_1
(表单名称和字段)传递给p:对话框,以使其成为更通用的弹出对话框?还有一种方法可以不必为每个字段编写一个监听器方法(popDownId1,popDownId2等等)作为奖励,我还想将对话框外部化并将其包含在每个xhtml页面中,而不是剪切和粘贴正如我现在所做的那样。
这是更实际的代码:
<h:form id="myForm">
<h:panelGrid columns="3">
<p:outputLabel value="Manager Employee Number: " />
<h:panelGroup>
<p:inputText id="managerId"
title="Type Employee Id or click the ? to search for their Id"
value="#{bean.department.manager}" >
<f:validator validatorId="com.company.app.EmployeeIdValidator" />
</p:inputText>
<p:commandButton title="Click here if you don't know their Employee Number"
id="managerId" value="Lookup Id"
onclick="PF('dlgManager').show();" type="button" >
</p:commandButton>
other fields and submit button
</h:form>
<p:dialog id="popup" modal="false" widgetVar="dlgManager" dynamic="true" >
<f:facet name="header">
<h:outputText value="Employee Number Finder" />
</f:facet>
<p>Search using any keyword.</p>
<h:form>
Keyword: <p:inputText id="search" value="#{employeeSearch.searchString}" />
<p:commandButton value="Search"
action="#{employeeSearch.searchByKeyword}">
<f:ajax execute="@form" render="output" />
</p:commandButton> (Enter keywords separated by spaces)
<p:dataTable id="output" var="employee" value="#{employeeSearch.employees}">
<p:column headerText="Action">
<h:commandLink value="Select" onclick="PF('dlgManager').hide()">
<f:ajax render=":myForm:managerId" event="click"
listener="#{bean.popDownManagerId(employee.id)}" />
</h:commandLink>
</p:column>
other columns(employee name, phone number, etc...)
</p:dialog>
你可以看到我需要复制对话框,并为我希望进行员工编号查询的表单上的每个字段稍微调整一下。
的onclick = “PF(的 'dlgManager')表示();” &GT;
的onclick = “PF(的 'dlgSupervisor')表示();” &GT;
的onclick = “PF(的 'dlgFloorChief')表示();” &GT;
当应用BalusC的答案时,如果我添加第二个查找Id按钮,则选择员工ID的弹出对话框有一个仅与ManagerId字段绑定的命令链接
action="#{bean.popDownManagerId(employee.id)}"
此外,当按下第二个查找ID按钮时,仍会列出先前的搜索结果,因此选择命令链接将引用错误的字段进行更新