Foros del Web » Programación para mayores de 30 ;) » Java »

Conectar dos JSF a través de un submit

Estas en el tema de Conectar dos JSF a través de un submit en el foro de Java en Foros del Web. Hola, tengo un problemilla a ver si me podeis ayudar: Tengo dos páginas XHTML: - En una de ellas tengo un combo y un submit, ...
  #1 (permalink)  
Antiguo 19/07/2013, 01:13
 
Fecha de Ingreso: julio-2013
Mensajes: 36
Antigüedad: 11 años, 4 meses
Puntos: 2
Conectar dos JSF a través de un submit

Hola, tengo un problemilla a ver si me podeis ayudar:

Tengo dos páginas XHTML:
- En una de ellas tengo un combo y un submit, quiero que al presionar ese submit me vaya a la otra página xhtml.

Soy nuevo en este mundillo y no se como hacerlo. Si me podeis ayudar os lo agradecería.

Un saludo y gracias.
  #2 (permalink)  
Antiguo 19/07/2013, 04:47
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 7 meses
Puntos: 33
Respuesta: Conectar dos JSF a través de un submit

Buenas!

Curiosamente yo estoy empezando también con esto de JSF...

Lo que tienes que hacer (a ver si no me olvido de nada... ) para redireccionar es lo siguiente:

- En tu página XHML tener un "<h:form>"
- Dentro del form, un "<h:commandButton>" con un "action"
- En el archivo "faces-config.xml" tienes que dar de alta una nueva regla de redirección:

* Abres "faces-config.xml"
* Vas a "navigation rules"
* Add
* En "from" pones la vista que envía
* Aprietas "finish"
* Haces doble click sobre el ítem que se crea
* En la parte inferior, verás un "navigation cases"
* Pulsas "add"
* En "from outcome" pones el action del form
* En "to View ID" pones la página de destino

Otra manera es hacerlo mediante XML directamente:

<navigation-rule>
<from-view-id>/vistaprimera</from-view-id>
<navigation-case>
<from-outcome>action</from-outcome>
<to-view-id>/vistasegunda</to-view-id>
</navigation-case>
</navigation-rule>

Espero que te sirva

Un saludo!
  #3 (permalink)  
Antiguo 22/07/2013, 00:09
 
Fecha de Ingreso: julio-2013
Mensajes: 36
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Conectar dos JSF a través de un submit

Hola, hago lo que me dices, pero al dar al submit me pone:

viewId:/xhtml/skill.faces - No se pudo restablecer la vista /xhtml/skill.faces.

Me da ese error, ¿sabes porque puede ser?
  #4 (permalink)  
Antiguo 22/07/2013, 00:14
 
Fecha de Ingreso: julio-2013
Mensajes: 36
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Conectar dos JSF a través de un submit

Dentro del action del command Button hay que poner algo?

action="aqui"
  #5 (permalink)  
Antiguo 22/07/2013, 01:13
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 7 meses
Puntos: 33
Respuesta: Conectar dos JSF a través de un submit

Claro, deberías hacer algo así como:

<h:commandButton value="Enviar" action="texto*" />

donde texto* puede ser:

- Una cadena estática
- Una EL propia de JSF (#{}).

Si usas la EL, tienes que llamar al método de algún Bean (puedes omitir los paréntesis). Este método tiene que ser "public String ...()". Te pongo un ejemplo:

<h:commandButton value="Enviar" action="#{miBean.submit}" />

En "miBean.java":

Código Java:
Ver original
  1. public String submit(){
  2.    String devolver = new String("");
  3.   //aquí puedes hacer cosas, como guardar datos o validar algo
  4.   return devolver;
  5. }

Entonces el commandButton tendrá como "action" el valor que retorne la función.

Recuerda dar de alta la "navigation rule"
  #6 (permalink)  
Antiguo 22/07/2013, 01:31
 
Fecha de Ingreso: julio-2013
Mensajes: 36
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Conectar dos JSF a través de un submit

Pues hago eso que dices, pero me sale el mensaje este:

viewId:/xhtml/skill.faces - No se pudo restablecer la vista /xhtml/skill.faces.


Y no se como hacerlo....
  #7 (permalink)  
Antiguo 22/07/2013, 01:36
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 7 meses
Puntos: 33
Respuesta: Conectar dos JSF a través de un submit

Puede ser que hayas dejado algún campo o atributo obligatorio vacío, o quizás hayas metido la segunda vista en una carpeta diferente...

Postea (si puedes) el código de tu primera vista xhtml, y si haces uso de Beans (y puedes) postea también las partes importantes de éstos, y revisa lo siguiente:

- Ambas vistas xhtml están en WebContent (no en WEB-INF)
- Tienes dada de alta la regla de redirección
- No tienes errores de compilación en los Bean.

Un saludo.
  #8 (permalink)  
Antiguo 22/07/2013, 02:59
 
Fecha de Ingreso: julio-2013
Mensajes: 36
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Conectar dos JSF a través de un submit

Hola de nuevo, a ver si queda claro. Muchas gracias!!

----PRIMERA PAGINA XHTML----------

<h:body>
<f:verbatim>
<h2>Tabla de Skills</h2>
</f:verbatim>
<h:form id="formu_listas" style="height: 119px; " >
<h:panelGrid id="panel_listas" columns="1" style="height: 156px; ">
<h:selectManyMenu id="lista_skills"
value="#{skill_bean.skill_seleccionado}" style="width: 182px; height: 208px">
<f:selectItems id="contenido_skills" value="#{skill_bean.lista_skills}" />
</h:selectManyMenu>
<h:commandButton value="Comprobar Skills" action="tablacv"/>
</h:panelGrid>
</h:form>
</h:body>



-------BEAN DE ESTA PRIMERA PAGINA------

public class skill_bean {
// PROPIEDADES PARA RECIBIR LOS VALORES SELECCIONADOS
private String skill_seleccionado;
//COLECCIONES PARA MOSTRAR EN EL COMBO
private List<SelectItem> lista_skills;

public skill_bean(){
//INICIAMOS LA COLECCION PARA LA INFORMACION DEL COMBO DE SKILL
lista_skills =new ArrayList<SelectItem>();
//REALIZACION DE LA CONSULTA A LA BASE DE DATOS
IGestion_Skill gestion_Skill=Acceso_ApplicationContext.getBean
(IGestion_Skill.class);
List<Skills> consulta_skills=gestion_Skill.consultar_Todos();
//CARGO LA INFORMACION PARA SER MOSTRADA EN EL COMBO
SelectItem item_comboskills = new SelectItem();
item_comboskills.setLabel("Seleccione un skill");
for (Skills skills :consulta_skills){
item_comboskills=new SelectItem();
item_comboskills.setLabel(skills.getSkill());
item_comboskills.setValue(skills.getIdskill());
System.out.println("--- label ::: "+item_comboskills.getLabel());
lista_skills.add(item_comboskills);
}

}


--------SEGUNDA PAGINA XHTML---------
<h:body>
<h:outputText value="CURRICULUMS"/>
<h:form>
<h:dataTable border="3" value="#{cv_bean.lista_CV}" var="cv">
<h:column>
<f:facet name="header">idCV</f:facet>
<h:outputText value="${cv.value}"/>
</h:column>
<h:column>
<f:facet name="header">Texto</f:facet>
<h:outputText value="${cv.label}" styleClass="enfasis"/>
</h:column>
</h:dataTable>
</h:form>
</h:body>


-------BEAN DE LA SEGUNDA PAGINA------


public class cv_bean {
// PROPIEDADES PARA RECIBIR LOS VALORES SELECCIONADOS
private String cv_seleccionado;
//COLECCIONES PARA MOSTRAR EN LA TABLA
private List<SelectItem> lista_CV;

public cv_bean(){
//INICIAMOS LA COLECCION PARA LA INFORMACION DEL COMBO DE SKILL
lista_CV =new ArrayList<SelectItem>();
//REALIZACION DE LA CONSULTA A LA BASE DE DATOS
IGestion_CV gestion_cv= Acceso_ApplicationContext.getBean(IGestion_CV.clas s);
List<Tempcv> consulta_CV=gestion_cv.recibir_cv();
//CARGO LA INFORMACION PARA SER MOSTRADA EN LA TABLA
SelectItem item_tablacv = new SelectItem();
item_tablacv.setLabel("Mire CV");
for (Tempcv CV :consulta_CV){
item_tablacv=new SelectItem();
item_tablacv.setLabel(CV.getTexto());
item_tablacv.setValue(CV.getIdCv());
System.out.println("--- label ::: "+item_tablacv.getLabel());
lista_CV.add(item_tablacv);
}
}

------FACES CONGFIG---------

<managed-bean>
<managed-bean-name>skill_bean</managed-bean-name>
<managed-bean-class>com.proyecto.managedbean.skill_bean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>

<managed-bean>
<managed-bean-name>cv_bean</managed-bean-name>
<managed-bean-class>com.proyecto.managedbean.cv_bean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>

</managed-bean>

<navigation-rule>
<from-view-id>/xhtml/skill.xhtml</from-view-id>
<navigation-case>
<from-outcome>tablacv</from-outcome>
<to-view-id>/xhtml/tablacv.xhtml</to-view-id>
</navigation-case>



Muchas Gracias por todo.
  #9 (permalink)  
Antiguo 22/07/2013, 03:15
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 7 meses
Puntos: 33
Respuesta: Conectar dos JSF a través de un submit

Pues vaya, así parece que esté todo bien... ¿Quizás las rutas? Veo que pones /xhtml/nombre.xhtml; ¿Tienes los xhtml en ese directorio?

Da la sensación por el mensaje de error, que hay algún problema al volver a renderizar la primera página.

Es posible que el error sea algo propio de JSF (tuve un par de problemas "raros" con JSF cuando cargaba muchos datos).

Será cosa de que alguien más nos ayude, por que yo (de momento) no veo nada raro que pueda dar el error.

Seguiré mirando a ver si encontrara algo y te comento

Un saludo!
  #10 (permalink)  
Antiguo 22/07/2013, 03:18
 
Fecha de Ingreso: julio-2013
Mensajes: 36
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Conectar dos JSF a través de un submit

Ahora me pone este mensaje:

"Target model Type is no a Collection or Array"

Puedes saber porque sucede esto?

Muchas Gracias.
  #11 (permalink)  
Antiguo 22/07/2013, 03:19
 
Fecha de Ingreso: julio-2013
Mensajes: 36
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Conectar dos JSF a través de un submit

Si los xhtml los mete en una carpeta con el mismo nombre. A ver si alguién nos ayuda. El otro error que te puse en el comentario anterior a que puede ser debido? Muchas Gracias.
  #12 (permalink)  
Antiguo 22/07/2013, 03:51
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 7 meses
Puntos: 33
Respuesta: Conectar dos JSF a través de un submit

el atributo "private List<SelectItem> lista_CV;" tiene su correspondiente "getter" y "setter"?

public List<SelectItem> getLista_CV()...


Un poco off-topic: recuerda que la convención de JAVA indica que los nombres de atributo no deben tener "_", sino apliar las palabras, con la primera letra de cada una en mayúscula (porEjemploAsi).

Volviendo al tema; si no tienes los getter y setter JSF no podrá acceder al campo, por lo que te dará error...
  #13 (permalink)  
Antiguo 22/07/2013, 03:59
 
Fecha de Ingreso: julio-2013
Mensajes: 36
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Conectar dos JSF a través de un submit

Si tienen los "getter y "setter". Eso es todo correcto. No consigo solucionar lo de:


"Target model Type is no a Collection or Array"

Muchas Gracias.
  #14 (permalink)  
Antiguo 22/07/2013, 04:28
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 7 meses
Puntos: 33
Respuesta: Conectar dos JSF a través de un submit

Las listas las instancias fuera del constructor?

Es decir:

Código Java:
Ver original
  1. public class miClase{
  2.  List<miClase2> lista = new ArrayList<miClase2>();
  3.  
  4.  public miClase(){}
  5. }

Es posible que si no está así, al retornar un "null" te de el error... jejeje.
  #15 (permalink)  
Antiguo 22/07/2013, 04:56
 
Fecha de Ingreso: julio-2013
Mensajes: 36
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Conectar dos JSF a través de un submit

Si las instancio fuera y después las llamo dentro del constructor, esta mal asi? Nada sigo con el error.....

Si las instancio dentro del constructor puede cambiar la cosa?

Muchas Gracias
  #16 (permalink)  
Antiguo 22/07/2013, 05:16
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 7 meses
Puntos: 33
Respuesta: Conectar dos JSF a través de un submit

Hombre, la cosa está (creo) en que en el momento que va a acceder a una lista (tendrás que mirar el log y ver en qué línea da el error) ésta no es una lista válida para JSF (por ejemplo, un dato tipo Map no es válido para JSF).

Por tanto ahí viene lo que te decía; si es "null", no podrá acceder.

Si dices que en el constructor tratas la lista, es posible que esté retornando un "null" al intentar rellenar (no se cómo es tu código, revisa si pudiera ser posible).

Puedes probar de hacer lo siguiente, para descartar que sea este el problema:

Código Java:
Ver original
  1. public miClase(){//constructor
  2.   List<Clase2> auxiliar = this.rellenarLista();
  3.  
  4.   if(auxiliar == null || auxiliar.isEmpty()){//si al rellenar obtenemos "null" o una lista vacía...
  5.     this.miLista = new ArrayList<Clase2>();
  6.     this.miLista.add(new Clase2());//añadimos algunos objetos...
  7.   }else{
  8.      this.miLista = auxiliar;
  9.   }
  10.  
  11.   System.out.println(this.miLista);
  12. }

De este modo, sí o sí la lista tendrá algo. Si ejecutas y ves los datos que has metido "de prueba" (en el if), es que al momento de llenar la lista hay algún error (por tanto tendrías que revisar ahí).

Es un poco "chapuza", pero te puede ayudar a ver qué pasa por ahí...
  #17 (permalink)  
Antiguo 22/07/2013, 05:25
 
Fecha de Ingreso: julio-2013
Mensajes: 36
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Conectar dos JSF a través de un submit

A ver las dos páginas xhtml por separado funcionan bien, el problema es que cuando le das al submit no me lleva a la otra página y me sale el mensaje:

"Target model Type is no a Collection or Array"

Ya no se por dónde tirar......

Muchas Gracias, un saludo
  #18 (permalink)  
Antiguo 22/07/2013, 06:58
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 7 meses
Puntos: 33
Respuesta: Conectar dos JSF a través de un submit

Ah!

Eso eso otra cosa... jejeje.

¿La lista que te tira el error la pasas por casualidad entre las páginas? ¿O son páginas independientes?

Me refiero a que si elaboras la lista (que da el error) a partir de los ítems seleccionados en la primera.

Por lo que me dices, el problema está en algún punto de la comunicación entre páginas.

En cuanto pueda subiré a mediafire un ejemplo que tengo hecho de comunicación entre páginas para que eches un ojo a ver si ves algo que falte

Un saludo.

Anexo link: http://www.mediafire.com/?au8extq92pbv2o5

Tiene un poco de todo, basado siempre en JSF.

Última edición por DoHITB; 22/07/2013 a las 07:04
  #19 (permalink)  
Antiguo 23/07/2013, 01:05
 
Fecha de Ingreso: julio-2013
Mensajes: 36
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Conectar dos JSF a través de un submit

Hola, ya consegui que me pasase de una página XHTML a otra. Gracias por los consejos.

Era quitando:

"value="#{skill_bean.skill_seleccionado}" de la primera página XHTML.

Etiquetas: html, jsf, submit
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:09.