Редактируемые данные с использованием диалога в JSF 2.0 - PullRequest
1 голос
/ 14 января 2011

В настоящее время я запускаю свое веб-приложение в JSF 2.0, оно также использует Primefaces 2.2RC2.

Я знаю, что у Primefaces есть возможность иметь редактируемые строки, но для моего проекта я бы предпочел, чтобыпользователь нажимает на кнопку commandButton в таблице, где отображается диалоговое окно, предварительно заполненное значениями этих конкретных строк, и пользователь может редактировать строку таким образом.

Единственный способ, с помощью которого я получил это, - это в столбце, который содержит commandButton, передать содержимое строк в виде параметров, как в примере ниже:

<p:dataTable var="car" value="#{myBean.cars}" id="carList">  
   <h:column>
         <h:inputText value="#{car.id}" style="width:100%"/> 
   </h:column>

   <h:column>
        <h:inputText value="#{car.name}" style="width:100%"/> 
   </h:column>
   <h:column>
        <h:commandButton actionListener=#{myBean.updateRow} onsuccess="editCardDialog.show()" >
           <f:param name="carId" value=#{car.id} />
           <f:param name="carName" value=#{car.name} />
        </h:commandButton>
    </h:column>

    ...
</p:dataTable>

Так что мой вопрос заключается в следующемв настоящее время единственный способ, с помощью которого я получил это, состоит в том, чтобы в моем компоненте поддержки создать фиктивные временные глобальные переменные для установки параметров, чтобы при открытии моего диалога он мог ссылаться на значения, подобные

     //myBean.java
     private String tempCarId;
     private String tempCarName;

     public void setTempCarId(String tempCarId) {
          this.tempCarId = carId;
     }

     public String getTempCarId() {
          return tempCarId;
     }

     public void setTempCarName(String tempCarName) {
          this.tempCarName = carName;
     }

     public String getTempCarName() {
          return tempCarName;
     }

     public void updateRow(ActionEvent event) {

            String carId = FaceContext...getParameterMap("carId");
            String carName = FacesContext...getParameterMap("carName");

            setTempCarId(carId);
            setTempCarName(carName);      
     }

в диалоге я просто буду ссылаться на эти временные переменные

    <p:dialog>
        <h:inputText value=#{myBean.tempCarId} />
        <h:inputText value=#{myBean.tempCarName} />
    </p:dialog>

Я не уверен, что это правильный способ сделать это.Моя интуиция говорит мне, что это не так, потому что кажется крайне избыточным создавать временные переменные в моем Бине, чтобы я мог передать их в диалог.Кто-нибудь знает лучший, более краткий способ сделать это, поэтому мне не нужно создавать миллион временных переменных в моем компоненте поддержки?

1 Ответ

2 голосов
/ 14 января 2011

Просто замените outputTexts в диалоговом окне ниже на inputTexts;

http://www.primefaces.org/showcase/ui/datatableRowSelectionByColumn.jsf

или

http://www.primefaces.org/showcase/ui/datatableRowSelectionInstant.jsf

...