Изменение переменной из DataTable в диалоге - PullRequest
0 голосов
/ 26 ноября 2011

У меня есть вопрос об обновлении переменной внутри компонента dataTable, который был отправлен компоненту диалога.

Я хочу иметь диалоговое окно с параметрами.Есть информация о пользователе (редактирование пользовательских данных).Класс ManageUsers имеет свойство UserDAO selectedUser, класс UserDAO содержит POJO пользователя (логин, адрес электронной почты и т. Д.).
ManageUsers.updateUser сохраняет данные в базе данных.

Как обновить selectedUser через inputText?Я не могу использовать компонент p:inplace, потому что у меня есть проблема с h:forms и facelets (переход на стадию производства не решает эту проблему).

Glassfish: 3.1
Primefaces: 2.2
JSF: 2.1 (теперь MyFaces 2.1.3)

<h:form prependId="false"> 

   <p:growl id="growl"/>

   <!--            Data table with all users-->
   <p:dataTable id="userTable" var="u" value="#{manageUsers.users}"> 

      <p:column headerText="login" style="width:150px" filterBy="#{u.user.login}" filterMatchMode="contains"> 
         <h:outputText value="#{u.user.login}" />
      </p:column> 

      <p:column headerText="email" style="width:150px" filterBy="#{u.user.email}" filterMatchMode="contains"> 
         <h:outputText value="#{u.user.email}" /> 
      </p:column>

      <p:column headerText="apikey" style="width:150px" filterBy="#{u.user.apikey}" filterMatchMode="startsWith"> 
         <h:outputText value="#{u.user.apikey}" />
      </p:column>

      <p:column headerText="Options" > 
         <p:commandButton update="display" oncomplete="userDialog.show()" 
                      image="ui-icon ui-icon-search"> 
            <f:setPropertyActionListener value="#{u}" target="#{manageUsers.selectedUser}" /> 
         </p:commandButton> 
      </p:column> 

   </p:dataTable>   

   <!--            Dialog box with options-->
   <p:dialog appendToBody="true" header="User Detail" widgetVar="userDialog" resizable="false" 
           width="500" showEffect="explode" hideEffect="explode" onCloseUpdate="growl,userTable"> 
      <h:panelGrid id="display" columns="2" cellpadding="4"> 

         <h:outputText value="Login" />
         <p:inputText  required="true" value="#{manageUsers.selectedUser.user.login}" />

         <h:outputText value="Email" />
         <p:inputText  required="true" value="#{manageUsers.selectedUser.user.email}" />

         <p:commandButton value="save and exit" action="#{manageUsers.updateUser}" update="growl,userTable" onclick="userDialog.hide()" />

      </h:panelGrid> 
   </p:dialog>

</h:form>

Example view

1 Ответ

1 голос
/ 28 ноября 2011
PROBLEM RESOLVED. Setters was not fired. I don't know why, but when I remove appendToBody="true", then setters work perfectly. Anyone know why?

Установщики не были запущены, потому что установка appendToBody в true может привести к тому, что диалоговое окно выйдет из формы компонента. Руководство пользователя Primefaces (3.0.M4):

    Use appendToBody with care as the page definition and html dom would be different, for
example if dialog is inside an h:form component and appendToBody is enabled, on the browser
dialog would be outside of form and may cause unexpected results. In this case, nest a form inside
a dialog.
...