我正在使用JSF 2.0和Primefaces 3.4.2
由于某些奇怪的原因,当点击数据表中的行的命令按钮时,我无法在弹出对话框窗口中获取该值。不确定我做错了什么?
任何帮助都非常值得赞赏。
我在JSF页面中有以下内容
<p:dataTable id="dataTable" var="emp" lazy="true"
value="#{myMB.lazyModel}"
selection="#{myMB.selectedEmployee}"...>
<p:column>
<p:commandButton id="edit" update=":frmedit:editDlg" process="@this"
onmousedown="dlg.show()" icon="ui-icon-pencil"
title="Edit" >
<f:setPropertyActionListener value="#{emp}"
target="#{myMB.selectedEmployee}" />
</p:commandButton>
</p:column>
对话框代码
<h:form id="frmedit">
<p:dialog header="Employees" style="font-weight:bold"
widgetVar=Dialog" resizable="false" id="dlg"
showEffect="fade" hideEffect="fade" appendToBody="true"
modal="true" width="200" height="250">
<h:panelGrid columns="2" cellspacing="5">
<h:outputText value="Employee #" />
<h:outputText value="#{myMB.selectedEmployee.empNo}"
style="font-weight:bold" />
</h:panelGrid>
最后在ManagedBean中
@Named("myMB")
@ViewAccessScoped
private Employee selectedEmployee= new Employee();
使用getter和setter
更新1
<p:column>
<p:commandButton id="edit" update=":frmedit:display" process="@this"
title="View"
icon="ui-icon-pencil" style="border-width:0;background:none;"
onmousedown="Dialog.show()">
<f:setPropertyActionListener value="#{emp}"
target="#{myMB.selectedEmployee}" />
</p:commandButton>
</p:column>
<p:dialog header="Employees" style="font-weight:bold"
widgetVar=Dialog" resizable="false" id="dlg"
showEffect="fade" hideEffect="fade" appendToBody="true"
modal="true" width="200" height="250">
<h:form id="frmedit">
<h:panelGrid id="display" columns="2" cellspacing="5">
<h:outputText value="Employee #" />
<h:outputText value="#{myMB.selectedEmployee.empNo}"
style="font-weight:bold" />
</h:panelGrid>
</h:form>
</p:dialog>
答案 0 :(得分:2)
为什么会出现这种情况的三个主要原因是
该对话框实际上并未更新ajax
属性侦听器未设置该值。您可以通过向该属性的setter添加一些日志记录来轻松地调试它
实际上是重新创建了bean,并且根据您的重新初始化了selectedEmployee
属性
行:
Employee selectedEmployee= new Employee();
根据您对上一个答案的评论,对于具有相同值的同一对话框,您不应该widgetVar
和id
我的投票结果是(3)。您应该验证bean实际上没有被删除和重新创建(构造函数或@PostConstructor
日志记录)。
答案 1 :(得分:0)
请widgetVar="dlg"
代替<p:dialog...>
,根据此Example,您应致电
dialog
属性的 widgetVar
所以dlg.show()
是指widgetVar="dlg"
而不是id