0

我正在使用 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>
4

2 回答 2

2

出现这种情况的三个主要原因是

  1. 该对话框实际上并未更新 ajax

  2. 属性侦听器未设置该值。您可以通过向该属性的设置器添加一些日志记录来轻松调试它

  3. 实际上重新创建了 bean,并且selectedEmployee根据您的行重新初始化了属性:

    Employee selectedEmployee= new Employee();
    
  4. 根据您对上一个答案的评论,对于具有相同值的同一个对话框,您不应该拥有widgetVarid

我的投票是(3)。您应该验证 bean 实际上没有被丢弃和重新创建(构造函数或@PostConstructor日志记录)。

于 2013-05-25T14:45:53.807 回答
0

widgetVar="dlg"改为尝试<p:dialog...>,根据此示例,您应该调用

dialog从它的widgetVar属性

所以dlg.show()widgetVar="dlg"不是id

于 2013-05-25T09:57:49.047 回答