Jsf 2 Navegación
Hola buen Día, Tengo una duda Utilizando JSF 2 Con Facelets, resulta que al momento de generar un action en una pagina xhtml esta no se ejecuta de momento, es decir presiono click sobre un boton para generar una accion, y en vez de ejecutar el metodo vuelve a cargar la misma pagina, y no es luego del 2do click sobre el mismo boton que se ejecuta el metodo... no se que sera mi problema... me podrian guiar o dar un buen tutorial acerca de JSF 2 + Facelets, soy nuevo en este Framework Gracias! =D
- Inicie sesión o regístrese para enviar comentarios
Hola
Hola, cuelga el codigo para verificar...
Hola! Gracias por Atender!
si bueno resulta que tengo algunas clases ya para gestionar el leer un pais y agregarle ciudades... voy con mi codigo...
esta es mi xHtml Index.
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:cc="http://java.sun.com/jsf/composite">
<f:loadBundle basename="etiquetas_esp" var="etiqueta"/>
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="css/estilo001.css" />
<title>#{etiqueta['eg.title']}</title>
</h:head>
<h:body>
<h:form id="LoginForm">
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<table width="100%" border="0" cellspacing="0">
<col width="25%"/>
<col width="1%"/>
<col width="48%"/>
<col width="1%"/>
<col width="25%"/>
<tr>
<td> </td>
<td> </td>
<td><table width="100%" cellpadding="1" cellspacing="0" >
<tr>
<td> <br /> </td>
</tr>
<tr>
<td> <br /> </td>
<td> <br /> </td>
<td> <br /> </td>
</tr>
<tr>
<td align="right"><font class="tituloPortada" >#{etiqueta['eg.usuario']}</font></td>
<td> </td>
<td>
<h:inputText id="loginName" required="true" value="#{acceso.login}" >
<f:validateBean />
</h:inputText>
<h:message id="loginError" for="loginName" errorClass="fuenteRojaError" />
</td>
</tr>
<tr>
<td align="right"><font class="tituloPortada">#{etiqueta['eg.contra']}</font></td>
<td> </td>
<td>
<h:inputSecret id="loginPass" required="true" value="#{acceso.passwd}" >
<f:validateBean />
</h:inputSecret>
<h:message id="passwordError" for="loginPass" errorClass="fuenteRojaError" />
</td>
</tr>
<tr>
<td> <br /> </td>
<td> <br /> </td>
<td> <br /> </td>
</tr>
<tr>
<td colspan="2" align="right">
<h:commandButton value="#{etiqueta['eg.acepta']}" action="#{acceso.checklogin}">
<f:ajax execute="@form" render="LoginForm:ajaxMessage"/>
</h:commandButton>
</td>
<td colspan="2" align="left">
<h:commandButton value="#{etiqueta['eg.cancel']}" type="reset">
</h:commandButton>
</td>
</tr>
</table></td>
<td> </td>
<td> </td>
</tr>
</table>
<br/>
<h3 class="fuenteRojaError"><h:outputText value="#{acceso.msgvalid}" id="ajaxMessage"/></h3>
</h:form>
</h:body>
</html>
esta funciona perfectamente dirigiendome a la pagina asignada. esta es su clase.
import javax.faces.bean.*;
import java.sql.*;
import javax.validation.constraints.*;
import com.Sistema.conexion.conex;
import java.io.Serializable;
@ManagedBean(name="acceso", eager=true)
@SessionScoped
public class usuario implements Serializable {
@NotNull
@Size(min = 6, max =10)
private String login;
@NotNull
@Size(min = 6, max = 50)
private String passwd;
private String desarrollo;
private String nuevo;
private String msgvalid_local;
private String msgvalid;
private String cusua;
//-----------------------------------------------------------------------------
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getPasswd() {
return passwd;
}
public String getDesarrollo() {
return desarrollo;
}
public String getNuevo() {
return nuevo;
}
public String getMsgvalid_local() {
return msgvalid_local;
}
public String getMsgvalid() {
return msgvalid;
}
public String getCusua() {
return cusua;
}
//-----------------------------------------------------------------------------
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public void setDesarrollo(String desarrollo) {
this.desarrollo = desarrollo;
}
public void setNuevo(String nuevo) {
this.nuevo = nuevo;
}
public void setMsgvalid_local(String msgvalid_local) {
this.msgvalid_local = msgvalid_local;
}
public void setMsgvalid(String msgvalid) {
this.msgvalid = msgvalid;
}
public void setCusua(String cusua) {
this.cusua = cusua;
}
//-----------------------------------------------------------------------------
public String checklogin() {
String donde = null;
//creamos una instancia de la clase conex de conexion
conex conectar = new conex();
ResultSet rs = null;
//Creamos una instancia del encriptador
MD5Util encripta = new MD5Util();
try {
if (this.passwd.trim().equals("") || this.login.trim().equals("")) {
this.msgvalid = "Ingrese Su Usuario Y Contraseña";
} else {
rs = conectar.EjecutarSelect("*", "nsbas001d", "login='" + this.login + "'", "");
if (rs.next()) {
if (!rs.getString("passwd").trim().equals(encripta.md5Hex(this.passwd.trim()))) {
this.msgvalid = "Password Incorrecto";
} else {
cusua= rs.getString("cusua");
donde = "/EstadosxPais/nsmpai01p.xhtml"; //Log//Ruta si se Obtiene la Contraseña y Usuario
}
} else {
this.msgvalid = "El Usuario No Existe";
}
rs.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
rs.close();
} catch (Exception ex) {
rs = null;
ex.printStackTrace();
}
}
return donde;
}
}
de la cual con el ultimo metodo envio a la siguiente pagina sin necesidad del faces-config
<!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:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.prime.com.tr/ui" >
<link rel="stylesheet" type="text/css" href="css/estilo001.css" />
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>#{etiqueta['eg.title']}</title>
</h:head>
<h:body>
<h:form id="ListadoForm">
<td> </td>
<td> </td>
<td> </td>
<table width="100%" cellspacing="1">
<tr>
<td colspan="8">
<table width="100%" border="0" cellspacing="0">
<tr>
<td width="12%"> </td>
<!-- Titulo -->
<td width="76%" align="center" class="titulo">
<font class="tituloPortada">#{etiqueta['tp.paises']}</font>
</td>
</tr>
</table>
</td>
</tr>
</table>
<br></br>
<br></br>
<table width="100%" cellspacing="1" align="center">
<tr>
<td colspan="6">
<table width="100%" border="0" cellspacing="0">
<tr>
<td width="12%"> </td>
<!-- Titulo Maestro de Paises -->
<td width="76%" align="center" class="titulo">
#{etiqueta['eg.title']}
</td>
</tr>
<tr>
<td width="12%" class="fuenteMsg">Hola: #{acceso.cusua}</td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="3" align="right"><font class="fuente" >#{etiqueta['eg.nompa']}</font></td>
<td> </td>
<td colspan="3" align="left">
<h:selectOneMenu id="paisSelected" value="#{paises.codpa}">
<f:selectItems value="#{paises.items2}" />
</h:selectOneMenu>
</td>
</tr>
<tr>
<td colspan="6" align="center">
<h:commandButton id="botonSel" action="#{paises.cargarEstados}" value="#{etiqueta['eg.acepta']}" >
<!-- <f:ajax execute="@form" render="ListadoForm:ajaxMessage"/> -->
</h:commandButton>
</td>
</tr>
</table>
<!--<h3 class="fuenteRojaError"><h:outputText value="#{paises.cusua}" id="ajaxMessage"/></h3> -->
</h:form>
</h:body>
</html>
aqui sucede mi caso... cuando presiono el boton que hace.... se devuelve a la misma pagina donde presione el boton y ni siquiera ejecuta la accion del metodo... para arreglar esto investigando lei que existe una forma de redirigir automaticamente a la siguiente pagina es con: "
?faces-redirect=true
" agregandose a la ruta de envio pero esta aparece sin la configuracion del archivo css... y no creo que deba funcionar asi... podrias no se guiarme o algo? GraciasRedireccion
Bueno una posible causa es porque cuando tu haces el return="/EstadosxPais/nsmpai01p.xhtml", el sistema no encuentra la pagina, yo en estos casos utilizo las siguientes formas.
1) Si la página a la cual quiero reedireccionar se encuentra en la misma parte de la página actual, es decir si estoy en la pagina index1.xhtml y quiero reedireccionar a la pagina index2.xhtml siemplemente en el metodo del bean hago un return "index2", y esto sin hacer una regla de navegacion.
2) si por el contrario quiero reedireccionar a otra pagina que se encuentra en otra ubicacion por ejemple /EstadosxPais/paises/estados.xhtml; creo una regla de navegacion en el faces-config de la siguiente manera...
<description>Reedireccion</description>
<from-view-id>index.xhtml</from-view-id>
<navigation-case>
<from-outcome>EstadosxPais</from-outcome>
<to-view-id>/pages/EstadosxPais/paises/estados.xhtml</to-view-id>
<redirect>true</redirect>
</navigation-case>
</navigation-rule>
y en el metodo del bean solo hago return "EstadosxPais"
Bueno espero que te sirva, de lo contario vuelva a preguntar
Un Saludo desde Colombia
reedireccion ajax
Bueno otra cosa que te puedo recomendar es que si pretendes hacer reedireccion de una pagina a otra en este caso con la accion checklogin, es preferible que le quites el
<f:ajax>
, alguna vez me paso que hacia eso y la pagina me reedireccionaba, pero me cargaba con algunos errores, le quite el ajax y quedo marchando bien....El ajax es bueno si necesitas hacer acciones sobre la misma pagina...No se si sea también tu caso...pero no esta de mas, ensayar con las dos opciones.
Un saluo
Vale, voy a verificar
Vale, voy a verificar... si de verdad bueno te respondo un poco tarde porque estaba operado de una cordal y no había regresado al proyecto... Mmm bueno voy a revisar y en el transcurso del día te comento que tal me fue Gracias de todos modos! =D
ahhhh algo mas
oye se me había olvidado preguntarte, hay un caso diferente ademas, resulta que no se porque nunca me toma las imágenes *.png o *.jpeg, he revisado por muchas partes cómo debía usar para importar las imágenes para fondo pero nada me ha resultado... tu sabrás algo con respecto a esta parte?
Resuelto...
hola que tal? Gracias por tu ayuda, te comento que después de revisar, le anexe a los enlaces el siguiente código:
?faces-redirect=true
terminando asi...
ahora si me gustaría si sabes bien la parte de las imágenes, me parece bien extraño y peor aun en mi archivo .css el fondo tampoco lo toma.. pero la configuración del archivo si.... es muy extraño... ahh por cierto estoy Trabajando con Netbeans 6.9.1
Gracias, Saludos desde Venezuela
Imagenes
Hola pues las imagenes la manejamos dentro de un css asi background-image:url(../images/backPage.jpg);
dentro del proyecto tenemos un folder que se llama resources/images y accedemos a ellas dentro de las paginas
<h:graphicImage value="#{resource['/images/img1.jpg']}"/>
y de esta manera nos ha funcionadoduda con la ruta
ok pero donde crearía dicha carpeta resources? ya aprendi a utilizarla en las páginas pero lamentablemente no me resulta el colocarlas como fondo.. que raro....
como voy...
por ejemplo, en mi carpeta del proyecto creé la carpeta de "resources", dentro de ella creé una llamada "Images"(contiene la imagen "6.jpg") y otra "css"(contiene "estilo001.css") e hice que le me comentaste dentro de "estilo001.css" coloque:
body
{
background-image: url(../Images/6.jpg);
background-repeat: repeat;
background-position: 0% 0%;
}
y luego importo las librería dentro del head:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="./resources/css/estilo001.css" rel="stylesheet" type="text/css" />
<title>#{etiqueta['eg.title']}</title>
</h:head>
pero no se si lo estaré haciendo bien... mientras seguiré investigando... Gracias por tu ayuda :)