2015-05-20 2 views
1

Я делаю страницу на Primefaces. Он имеет данные с одним выбором, и когда я делаю клик на кнопке, он показывает диалог.Интерфейс Primefaces не обновляет поля редактирования

Если в диалоговом окне отображаются только ярлыки с ouputtext, он отлично работает, но если я изменяю метки для входных текстов, кнопка не обновляет диалог.

Это ми XHTML Файл:

<p:dataTable id="deportes" var="deporte" value="#{deporteBean.deportesModel}" rowKey="#{deporte.idDeporte}" 
      selection="#{deporteBean.deporteActual}" selectionMode="single"> 

     <f:facet name="header"> 
      <h:outputLabel value="#{messages.sports_info_edit}"/>    
     </f:facet> 

     <p:column headerText="#{messages.sports_general_name}"> 
      #{deporte.idDeporte} 
     </p:column> 

     <p:column headerText="#{messages.sports_general_name}"> 
      #{deporte.nombre} 
     </p:column> 

     <p:column headerText="#{messages.sports_general_description}" > 
      #{deporte.descripcion} 
     </p:column> 

     <f:facet name="footer"> 
       <p:commandButton action="#{deporteBean.updateInfo}" actionListener="#{deporteBean.updateInfo}" id="viewButton" value="#{messages.sports_info_viewDetail}" icon="ui-icon-search" 
        oncomplete="deporteDialog.show()" update=":form:display" />           
    </f:facet> 
</p:dataTable> 

<p:dialog id="dialog" header="Detalle del deporte" widgetVar="deporteDialog" resizable="false" 
      width="400" showEffect="clip" hideEffect="fold" modal="true"> 

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

     <f:facet name="header"> 
      <h:outputText value="#{deporteBean.deporteActual.nombre}" /> 
     </f:facet> 

     <h:outputText value="Id" /> 
     <h:outputText value="#{deporteBean.deporteActual.idDeporte}" /> 

     <h:outputText value="Nombre:" /> 
     <h:outputText id="txtNombre" value="#{deporteBean.deporteActual.nombre}" />    

     <h:outputText value="Descripcion:" /> 
     <h:inputText value="#{deporteBean.deporteActual.descripcion}" /> 
    </h:panelGrid> 



    <p:commandButton id="aceptarButton" value ="#{messages.sports_info_save}" icon="ui-icon-disk" 
     action="#{deporteBean.save}" immediate="true" 
     update=":form:display" oncomplete="deporteDialog.hide()"> 
    </p:commandButton> 
</p:dialog> 

И это мой Bean (в faces.config.xml его рамки вид):

package com.sportsWorld.web.view; 
import java.util.ArrayList; 
import java.util.List; 
import dtorres.gymAdmin.dto.*; 
public class DeporteBean { 
private List<Deporte> deportes; 
private Deporte deporteActual; 
private DeporteDataModel deportesModel; 

public DeporteBean(){ 
    deportes = new ArrayList<Deporte>(); 
    deportes.add(new Deporte(1,"Tenis de mesa","Velocidad, precisión, concentración y reacción en el deporte más difícil del mundo.")); 
    deportes.add(new Deporte(2,"Fútbol 5","Lo mejor del deporte rey en un espacio pequeño")); 
    deportes.add(new Deporte(3,"Escalada","Fuerza, concentración y equilibrio se ponen a prueba en este magnfífico deporte para quienes no temen a las alturas")); 
    deportes.add(new Deporte(4,"Natación","Bla bla bla")); 
    deportes.add(new Deporte(5,"Gimnasio","Bla bla bla")); 
    deportes.add(new Deporte(6,"Spinning","Bla bla bla")); 
    deportes.add(new Deporte(7,"Bolos", "Bla bla bla")); 
    deporteActual = null; 
    deportesModel = new DeporteDataModel(deportes); 
} 

public List<Deporte> getDeportes() { 
    return deportes; 
} 



public void setDeportes(List<Deporte> deportes) { 
    this.deportes = deportes; 
} 



public Deporte getDeporteActual() { 
    return deporteActual; 
} 



public void setDeporteActual(Deporte deporteActual) { 
    this.deporteActual = deporteActual; 
} 



public DeporteDataModel getDeportesModel() { 
    return deportesModel; 
} 



public void setDeportesModel(DeporteDataModel deportesModel) { 
    this.deportesModel = deportesModel; 
} 

public void save(){ 
    System.out.println(deporteActual.getNombre()); 
} 


public void updateInfo(){ 
    System.out.println("Entra a UpdateInfo"); 
    System.out.println("UpdateInfo + " + deporteActual.getNombre()); 
} 

}

Метод updateInfo предназначен только для целей отладки, так как при изменении строки e в xhtml для этого отлично работает ... Большое спасибо!

Извините за мой английский!

+0

Добавить «h: messages», чтобы увидеть, есть ли ошибки проверки при использовании входов – Kukeltje

+0

Можете ли вы показать входные данные вместо выходов? И попробуйте без эффектов. IIRC, старая версия PF имела проблемы с этим в диалогах (какая версия PF вы используете btw? 3.4?) – Kukeltje

+0

Да, я могу показать выходы, но не входные данные. Если я использую входные данные, метод updateInfo в действии кнопки просмотра, показывает, что deporteActual является выбранной строкой. Но я использую входы, значение равно null. Я использовал PF 3.5 ... я собираюсь обновить и попробовать ... –

ответ

1

Я нашел решение. Изменения в файле Xhtml являются:

<p:dataTable id="deportes" var="deporte" value="#{deporteBean.deportesModel}" rowKey="#{deporte.idDeporte}" scrollWidth="true" 
      selection="#{deporteBean.deporteActual}" selectionMode="single" 
      > 
      <p:ajax event="rowSelect" listener="#{deporteBean.updateInfo}" update=":form:display"/> 
      <f:facet name="header"> 
       <h:outputLabel value="#{messages.sports_info_edit}"/>    
      </f:facet> 

      <p:column headerText="#{messages.sports_general_name}"> 
       #{deporte.idDeporte} 
      </p:column> 

      <p:column headerText="#{messages.sports_general_name}"> 
       #{deporte.nombre} 
      </p:column> 

      <p:column headerText="#{messages.sports_general_description}" > 
       #{deporte.descripcion} 
      </p:column> 

      <f:facet name="footer"> 
        <p:commandButton actionListener="#{deporteBean.updateInfo}" 
             id="viewButton" 
             value="#{messages.sports_info_viewDetail}" 
             icon="ui-icon-search" 
             oncomplete="PF('deporteDialog').show()" 
             update=":form:display"/> 
      </f:facet> 
    </p:dataTable> 

Обратите внимание на <p:ajax> тег .. кажется, что поле пустым ввода обновлял значение в боб ... ти этого АЯКС действия, теперь я обновить поле с bean's value.

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