2014-04-19 109 views
0

我正在Primefaces中開發應用程序,並且使用viewScoped bean處理命令按鈕時出現問題。Primefaces ViewScoped和commandButton不能正常工作

我想將一個ID從一個頁面傳遞到另一個頁面,所以每當有人想看到不同客戶端的詳細信息時就接收它,這個ID必須在URL中傳遞。

我收到如下:

<f:metadata> 
     <f:viewParam id="clientId" name="clientId" value="#{perfilClienteSeleccionadoBean.clientId}" /> 
    </f:metadata> 

接收數據的形式工作正常,我,但問題是在同一個bean,在那裏我已經定義了的clientId我試圖把它當用一個commandButton。這個commandButton沒有在視圖上插入值。

我的代碼顯示如下。

我的豆:

@Named(value = "perfilClienteSeleccionadoBean") 
@ViewScoped 
public class PerfilClienteSeleccionadoBean implements Serializable { 


private FacesMessage msgClienteSeleccionado; 
private Cliente cliente = new Cliente();  
private String clientId;  
private boolean nuevoCliente = true; 
@PostConstruct 
public void cargaInicial(){ 

    if (strClientId.equalsIgnoreCase("NULL")) { 
     nuevoCliente = true; 
     System.out.print("*****************IF********************"); 

    } else {//No es nuevo cliente 
     System.out.print("*****************Else********************"); 
     nuevoCliente = false; 
     ClientesDao clienteDao = new ClientesDaoImpl(); 
     cliente = clienteDao.findByDni(strClientId); 



    } 
} 
public FacesMessage getMsgClienteSeleccionado() { 
    return msgClienteSeleccionado; 
} 

public void setMsgClienteSeleccionado(FacesMessage msgClienteSeleccionado) { 
    this.msgClienteSeleccionado = msgClienteSeleccionado; 
} 

public String getClientId() { 
    return clientId; 
} 

public void setClientId(String clientId) { 
    this.clientId = clientId; 
} 

public Cliente getCliente() { 
    return cliente; 
} 

public void setCliente(Cliente cliente) { 
    this.cliente = cliente; 
} 

public boolean isNuevoCliente() { 
    return nuevoCliente; 
} 

public void setNuevoCliente(boolean nuevoCliente) { 
    this.nuevoCliente = nuevoCliente; 
} 
public void altaCliente() { 
    System.out.print("*****************altaCliente********************"); 
} 
public void updateCliente() { 
    System.out.print("***********************updateCliente****************"); 
} 
} 

的.xhtml:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:f="http://java.sun.com/jsf/core"> 


<h:head> 
    <title>Perfil Cliente</title> 
</h:head> 

<f:metadata> 
    <f:viewParam id="clientId" name="clientId" value="#{perfilClienteSeleccionadoBean.clientId}" /> 
</f:metadata> 

<h:body> 
    <ui:composition template="./comun/Plantilla.xhtml"> 
     <ui:define name="content"> 
      <h:form id="mensajesCliente"> 
       <p:messages id="msgClienteSeleccionado" showDetail="true" closable="true" /> 
      </h:form> 
      <h:form id="formClienteSeleccionado"> 
       <div align="center"> 
        <p:panel header="Perfil Usuario" > 

         <p:panelGrid columns="2" style="width: 50%"> 
          <h:outputText value="DNI:"/> 
          <p:inputText id="dniCliente" value="#{perfilClienteSeleccionadoBean.cliente.dniCliente}" size="50" maxlength="9" disabled="#{!perfilClienteSeleccionadoBean.nuevoCliente}" style="font-weight:bold"/> 

          <h:outputText value="Nombre:"/> 
          <p:inputText id="nombreCliente" value="#{perfilClienteSeleccionadoBean.cliente.nombre}" size="50" maxlength="50" disabled="#{!perfilClienteSeleccionadoBean.nuevoCliente}" style="font-weight:bold"/> 

          <h:outputText value="Primer apellido:"/> 
          <p:inputText id="apellido1Cliente" value="#{perfilClienteSeleccionadoBean.cliente.apellido1}" size="50" maxlength="50" disabled="#{!perfilClienteSeleccionadoBean.nuevoCliente}" style="font-weight:bold"/> 

          <h:outputText value="Segundo apellido:"/> 
          <p:inputText id="apellido2Cliente" value="#{perfilClienteSeleccionadoBean.cliente.apellido2}" size="50" maxlength="50" disabled="#{!perfilClienteSeleccionadoBean.nuevoCliente}" style="font-weight:bold"/> 



         </p:panelGrid> 

        </p:panel> 
       </div> 
    <div align="center" style="width: 95%!important"> 
          <p:commandButton id="AltaCliente" update=":formClienteSeleccionado, :mensajesCliente" value="Alta cliente" actionListener="#{perfilClienteSeleccionadoBean.altaCliente}" styleClass="ui-priority-primary" process="@all" rendered="#{perfilClienteSeleccionadoBean.nuevoCliente}"/> 
          <p:commandButton id="UpdateCliente" update=":formClienteSeleccionado, :mensajesCliente" value="Actualizar cliente" actionListener="#{perfilClienteSeleccionadoBean.updateCliente}" styleClass="ui-priority-primary" process="@all" rendered="#{!perfilClienteSeleccionadoBean.nuevoCliente}"/> 
          </div> 

      </h:form> 
     </ui:define> 

    </ui:composition> 


</h:body> 

所以我的問題是:

  • ¿我如何從一個頁面傳值到另一個頁面,只是爲了接收它,而不是使用@viewScoped或@requestScoped bean?我知道,如果bean是@viewScoped或@requestScoped,它每次被執行時都會被執行,所以我需要我的bean執行這種方式,因爲在de @postConstruct中,我捕獲了clientID。
  • ¿如果我使用@viewScopedBean,我該如何調用我的.xhtml頁面中的按鈕並讀取頁面中輸入的所有數據?

在此先感謝!

回答