0

Primefaces 3.4.2 で JSF 2.0 を使用しています

奇妙な理由で、データテーブルの行のコマンド ボタンをクリックしたときに、ポップアップ ダイアログ ウィンドウで値を取得できません。何が間違っているのかわからない?

どんな助けも非常に高く評価されます。

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();

ゲッターとセッターで

更新 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

The three main reasons why this would be the case are

  1. The dialog was not actually ajax updated

  2. The property listener didn't set the value. You could easily debug this by adding some logging to the setter for that property

  3. The bean was actually recreated and the selectedEmployee property was re-initialized per your line:

    Employee selectedEmployee= new Employee();
    
  4. Per your comments on the previous answer, you should not have widgetVar and id for the same dialog having the same value

My vote is on (3). You should verify that the bean is not actually being trashed and recreated (constructor or @PostConstructor logging).

于 2013-05-25T14:45:53.807 に答える
0

widgetVar="dlg"代わりに、この<p:dialog...>に従って、呼び出してください

dialogそのwidgetVar属性から

そうではないことdlg.show()を指しますwidgetVar="dlg"id

于 2013-05-25T09:57:49.047 に答える