首页 文章

JSF Primefaces编辑弹出窗口中的行值null

提问于
浏览
0

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

  • 0

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

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

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

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

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

    我的投票结果是(3) . 您应该验证bean实际上没有被删除并重新创建(构造函数或 @PostConstructor 日志记录) .

  • 2

    请改为 widgetVar="dlg" ,在 <p:dialog...> 中,根据这个Example你应该打电话

    dialog 来自其 widgetVar 属性

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

相关问题