2016-04-03 2 views
0

Следующий код реализует DataTable внутри макета, в DataTable я добавил кнопку редактирования в каждой строкепараметр Pass от DataTable к ар: диалоговое

<p:dataTable id="tbl" var="person" value="#{mybean.listPersons}" > 
      <p:column> 
       <f:facet name="header"> 
        <h:outputText value="Name " /> 
       </f:facet> 
       <h:outputText value="#{person.name}" /> 
      </p:column> 
      <p:column> 
       <f:facet name="header"> 
        <h:outputText value="Age :" /> 
       </f:facet> 
       <h:outputText value="#{person.age}" /> 
      </p:column> 
      <p:column> 
       <p:commandButton icon="ui-icon-pencil" 
       oncomplete="PF('dlg1').show();" action="mybean.setSelectedPerson(person)" /> 
      </p:column> 
</p:dataTable> 

Когда я нажимаю на кнопку редактирования, диалоговое (код ниже), но входы пустые, я хотел бы показать информацию о строке в диалоговом луке, я все еще новичок, я искал везде ... но никаких результатов

<p:dialog header="Modify" widgetVar="dlg1" > 
     <h:form > 
       <p:growl id="msgs" showDetail="true" /> 
       <h:panelGrid id="form2" value="#{myBean.person}" var="person"> 
         <p:outputLabel value="Name :" /> 
         <p:inputText value="#{person.name}" /> 
         <p:outputLabel value="Age :" /> 
         <p:inputText value="#{person.age}" /> 
         <p:commandButton value="Submit" action="#{myBean.modifyPerson(person)}" /> 
       </h:panelGrid> 
    </h:form> 
</p:dialog> 


@ManagedBean 
@RequestScoped 
public class muBean implements Serializable{ 
    private Person selectedPerson; 
    //getter and setter 

    public void modifyPerson(Person p) { 
     this.selectedPerson = p; 
    } 
} 

Я был бы так благодарен, если кто-нибудь может помочь, мне это действительно нужно

+0

Пытаться дать форму внутри диалогового окна id и поместите кнопку update = ": idOfForm" на кнопку. А также смените bean-компонент на ViewScoped, RequestScoped - это редкость –

ответ

-1

Изменить кнопку команды к следующему, используйте ActionListener:

<p:commandButton icon="ui-icon-pencil" update=":persondlgid" oncomplete="dlg1.show();" actionListener ="mybean.findSelectedPerson"> 
    <f:param name="personalid" value="#{person.id}" /> 
<p:commandButton/> 

Это диалоговое окно, добавьте свойство идентификатора к нему. Затем измените значение сетки панели для selectedPerson, потому что это соответствует правильному объекту в managedbean:

<p:dialog header="Modify" widgetVar="dlg1" id="persondlgid" > 
    <h:form> 
      <p:growl id="msgs" showDetail="true" /> 
      <h:panelGrid id="form2" value="#{myBean.selectedPerson}" var="person"> 
      <p:outputLabel value="Name :" /> 
      <p:inputText value="#{person.name}" /> 
      <p:outputLabel value="Age :" /> 
      <p:inputText value="#{person.age}" /> 
      <p:commandButton value="Submit" action="#{myBean.modifyPerson(person)}" /> 
      </h:panelGrid> 
    </h:form> 
</p:dialog> 

Управляемая функция боб должен выглядеть следующим образом. Это действие слушателя вызывается при нажатии на кнопку, и затем возвращает идентификатор выбранного человека и перебирает список лиц, чтобы найти тот, который вы ищете:

public void findSelectedPerson(ActionEvent event){ 
    if(event.getComponent().getAttributes().get("personid") != null){ 
     Map<String,String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); 
     int personid = (params.get("personid")!= null) ? Integer.parseInt(params.get("personid")) : -1; 
     // Loop through the persons array 
     for(Person p : listPersons){ 
     if(p.getId() == personid){ 
      selectedPerson = p; 
      break; 
     } 
    } 

}

Смежные вопросы