2013-06-27 4 views
0

У меня есть таблица Users. Добавлено, просмотр и удаление работы. Но у меня есть проблема для редактирования.Переменная переменная на следующей странице

Мой список страница:

<h:form id="form"> 
     <p:dataTable styleClass="table" value="#{userMB.allAdmins}" var="admin" paginator="true" rows="15" rowKey="#{admin.id}" selection="#{userMB.user}" selectionMode="single"> 
      <f:facet name="header"> 
       Lista administratorów 
      </f:facet> 

      <p:column headerText="#{msg.firstName}"> 
       <h:outputText value="#{admin.firstName}" /> 
      </p:column> 

      <p:column headerText="#{msg.lastName}"> 
       <h:outputText value="#{admin.lastName}" /> 
      </p:column> 

      <p:column headerText="#{msg.personalId}"> 
       <h:outputText value="#{admin.personalId}" /> 
      </p:column> 

      <f:facet name="footer"> 
       <p:commandButton id="viewButton" value="#{msg.info}" icon="ui-icon-search" 
           update=":form:display" oncomplete="userDialog.show()"/> 
       <p:commandButton action="#{userMB.createStart()}" value="#{msg.add}" icon="ui-icon-plus" /> 
       <p:commandButton action="#{userMB.editStart()}" value="#{msg.edit}" > 
        <f:setPropertyActionListener target="#{userMB.user}" value="#{userMB.user}" /> 
       </p:commandButton> 
       <p:commandButton action="#{userMB.deleteUser()}" value="#{msg.delete}" icon="ui-icon-close"/> 
      </f:facet> 
     </p:dataTable> 

     <p:dialog id="dialog" header="Administrator" widgetVar="userDialog" resizable="false" 
        width="300" showEffect="clip" hideEffect="explode"> 

      <h:panelGrid id="display" columns="2" cellpadding="4"> 

       <f:facet name="header"> 
        <p:graphicImage value="./../../images/person4.png" width="150" height="150"/> 
       </f:facet> 

       <h:outputText value="#{msg.firstName}" /> 
       <h:outputText value="#{userMB.user.firstName}" /> 

       <h:outputText value="#{msg.lastName}" /> 
       <h:outputText value="#{userMB.user.lastName}" /> 

       <h:outputText value="#{msg.personalId}" /> 
       <h:outputText value="#{userMB.user.personalId}" /> 

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

    </h:form> 

Я хочу послать выбранному пользователю на следующей странице: Я использую aciontListener:

   <p:commandButton action="#{userMB.editStart()}" value="#{msg.edit}" > 
        <f:setPropertyActionListener target="#{userMB.user}" value="#{userMB.user}" /> 
       </p:commandButton> 

Моя страница редактирования, где я хочу, чтобы отправить пользователю:

 <h:form> 
      <div id="userPanel"> 
       <h:inputHidden value="#{userMB.user}" /> 
       <p:panel id="panelUser" header="Edytuj administratora" > 
        <div id="panelImage"> 
         <img src="./../../images/person4.png" alt="person" width="150px" height="130px"/> 
        </div> 
        <h:panelGrid columns="3"> 
         <p:outputLabel for="firstName" value="#{msg.firstName}"></p:outputLabel> 
         <p:inputText id="firstName" value="#{userMB.user.firstName}" label="#{msg.firstName}" required="true"> 
          <f:validator validatorId="nameValidator" /> 
          <p:ajax update="msgFristName" event="keyup" /> 
         </p:inputText> 
         <p:message for="firstName" id="msgFristName"/> 

         <p:outputLabel for="lastName" value="#{msg.lastName}"></p:outputLabel> 
         <p:inputText id="lastName" value="#{userMB.user.lastName}" label="#{msg.lastName}" required="true"> 
          <f:validator validatorId="nameValidator" /> 
          <p:ajax update="msgLastName" event="keyup" /> 
         </p:inputText> 
         <p:message for="lastName" id="msgLastName"/> 

         <p:outputLabel for="personalId" value="#{msg.personalId}"></p:outputLabel> 
         <p:inputText id="personalId" value="#{userMB.user.personalId}" label="#{msg.personalId}" required="true"> 
          <f:validator validatorId="personalIdValidator" /> 
          <p:ajax update="msgPersonalId" event="keyup" /> 
         </p:inputText> 
         <p:message for="personalId" id="msgPersonalId"/> 

         <p:outputLabel for="password" value="#{msg.password}"></p:outputLabel> 

       </p:panel> 
      </div> 
     </h:form> 

Я добавил: <h:inputHidden value="#{userMB.user}" />, но я не вижу данных пользователя, только e пустое поле. Как отправить этого человека? Я использовал этот метод в другом проекте, немного отличался от других, и он работал. Почему сейчас не работает?

Метод editStart:

public String editStart() { 
    return "editStart"; 
} 

лица-конфигурации:

<navigation-case> 
    <from-outcome>editStart</from-outcome> 
    <to-view-id>/protected/admin/adminEdit.xhtml</to-view-id> 
    <redirect/> 
</navigation-case> 

Когда я нахожусь на стороне adminEdit я редактировал бассейн и сделать метод editUser:

public String editUser() { 
    FacesContext context = FacesContext.getCurrentInstance(); 
    Map requestParameterMap = (Map) context.getExternalContext().getRequestParameterMap(); 
    try { 
     String userRole = requestParameterMap.get("userRole").toString(); 
     String active = requestParameterMap.get("active").toString(); 
     Boolean act = Boolean.parseBoolean(active); 
     user.setRole(userRole); 
     user.setActive(act); 
     userDao.update(user); 
    } catch (EJBException e) { 
     sendErrorMessageToUser("Edit error"); 
     return null; 
    } 
    sendInfoMessageToUser("Account edited"); 
    return user.getRole() + "List"; 
} 

Мои метод editStart используется только для навигации.

+0

какой PF версия вы используете?в новых версиях вы можете передавать параметры в контексте EL, поэтому вы можете просто передать пользователя или его идентификатор прямому методу – Przemek

+0

Я использую PrimeFaces 3.5 –

+0

@Przemek: извините, но это вздор. Это абсолютно не относится к используемой версии PF. Это характерно для используемой версии EL. И да, EL 2.2 поддерживается, учитывая, что OP имеет явно работающий '# {userMB.deleteUser()}' в другом месте кода. См. Также http://stackoverflow.com/a/3284328 – BalusC

ответ

0

Вы можете передать свой идентификатор пользователя через сеанс.

Добавить параметр в свой commandLink

<p:commandButton action="#{userMB.editStart()}" value="#{msg.edit}> 
    <f:param name="userId" value="#{userMB.user.id}" /> 
</p:commandButton> 

В вашем бэк-боба сделать это

FacesContext context = FacesContext.getCurrentInstance(); 
HttpServletRequest myRequest = (HttpServletRequest)context.getExternalContext().getRequest(); 
HttpSession mySession = myRequest.getSession(); 
Integer userId = Integer.parseInt(myRequest.getParameter("userId")); 

После этого вы можете перезагрузить пользователь вы хотите изменить с Id вы получили

+0

Это не так просто. Мой meyhod ediStart возвращает String: «editStart» и в моей навигации по face-config, когда на странице adminList возвратите это значение, я перехожу на страницу adminEdit. Я отредактировал свой первый пост, посмотри. –

+0

в порядке. сначала вы можете упростить пересылку на следующую страницу, если вы вернете путь к следующей странице в своей строке, например «return» /path/to/file.xhtml?faces-redirect=true, поэтому вам не нужно чтобы отобразить это в face-config. для второй части рассмотрим, как передавать параметры через сеанс. Затем вы передаете идентификатор пользователя и перезагружаете его в следующем компоненте для использования. – Przemek

+0

Изменен/обновлен мой ответ на сеансовый обработанный параметр передачи – Przemek

1

Вы можете либо рассмотреть ответ Прземека, либо использовать один из 4 способов передачи параметра в бэкэнд-бэк. 1. Выражение Метода 2. е: пары 3. е: atribute 4. е: setPropertyActionListener

Для очень хорошо объяснен полного объяснения см this

Она легко понять примеры. Посмотрите и выберите то, что соответствует вашим потребностям.

Или просто:

В реальном управляемом компоненте ...

public String navigationButtonListener(User parameter) { 
    FacesContext.getCurrentInstance().getExternalContext().getRequestMap() 
      .put("parameterAttribute", parameter); 
    return "my-destination-page"; 
} 

В целевом управляемом бобе ...

@PostConstruct 
public void init(){ 
    myAttribute= (User) FacesContext.getCurrentInstance() 
    .getExternalContext().getRequestMap().get("parameterAttribute"); 

} 

Good Luck!