我正在使用JSF 2.0和Primefaces 3.4.2
由于某些奇怪的原因,当单击datatable中的行的命令按钮时,我无法在弹出对话框窗口中获取该值 . 不确定我做错了什么?
任何帮助都非常值得赞赏 .
我在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();
与吸气剂和二传手
Update 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>
2 回答
这种情况的三个主要原因是
该对话框实际上并未更新ajax
属性侦听器未设置该值 . 您可以通过向该属性的setter添加一些日志记录来轻松地调试它
实际上重新创建了bean,并且根据您的行重新初始化了
selectedEmployee
属性:widgetVar
和id
我的投票结果是(3) . 您应该验证bean实际上没有被删除并重新创建(构造函数或
@PostConstructor
日志记录) .请改为
widgetVar="dlg"
,在<p:dialog...>
中,根据这个Example你应该打电话dialog
来自其widgetVar
属性所以
dlg.show()
指的是widgetVar="dlg"
而不是id