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頁面中的按鈕並讀取頁面中輸入的所有數據?
在此先感謝!