Crear componentes dynamicos con JSF 2.0 y Facelets

Hola comunidad, un gusto saludarlos como siempre :)

Pues ahora vengo a platicarles una duda que tengo, soy nueva en JSF "por obligación" jeje lo de obligación en otra ocasión se los contaré, por lo pronto basta con decir que conozco poco sobre JSF, y para variar me están pidiendo hacer un Formulario completamente dinámico que en base a una configuración establecida en la BD yo pueda crear componentes (form, inputs, labels, selects, radios etc..) y pintarlos en mi xhtml con JSF y Facelets, pongamos un ejemplo:

Digamos que en mi base de datos tengo una configuración para crear el llenado de campos de una solicitud para un cliente como la siguiente:
Datos generales = Si
Datos trabajo = Si
Datos Estudios = No
Datos BNC = Si

esto quiere decir que yo tengo que mostrar en el xhtml un formulario con todos los campos para llenar los Datos generales del cliente, los datos de su trabajo y de buro nacional de crédito. Pero eso solo lo sé llendo a consultar la base de datos y en base a lo que tenga la BD yo debo generar esos campos y mostrarlos para que pueda llenarlos enviarlos al servidor para que se guarden y posteriormente si desea editarlos mostrar los valores que guarde.

En realidad no se que tan complicado sea, aún no tengo un panorama amplio en JSF, y para variar mi bOss me recomendó usar Facelets que a lo que yo he entendido de facelets es simplemente crear plantillas para mostrar contenido de una manera más ordenada y ya no pelearte tanto con el diseñador web, desmientanme si no es así y si facelets me sirviera para hacer esto pues mejor :)

En sí lo que busco es como el ejemplo básico para hacer todo este monstruo a mayor escala por que son demasiados parámetros los que yo debo consultar en la BD y los que debo decidir sobre mostrar o no mostrar.

Otra cosa que pudiera ser importante es que este super formulario dinámico ya está hecho con un Servlet que funciona como controller, beans y jsp's pero lo quieren migrar a JSF 2.0, Gracias de antemano y buen día a todos!!

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de anrnewton

Re:Crear componentes dynamicos con JSF 2.0 y Facelets

Hola q tal,

pues mira en base a tu problema o requerimiento, es facil hacerlo con JSF cualquier versio 1.2 o la 2.0, dependiendo la q estes usando, por otro lado, los facelets como bien lo mencionas solo es un framework para definir tus templates de tu sistema y hacer el reuso del mismo diseño establecido en tu portal, con respecto a como se puede hacer lo q planteas puedes crear en tu Managebean cada una de esas propiedades como tipo booleano, y luego una vez q vayas a la BD por los datos solo resta prender o apagar cada booleano en el ManageBean y luego hacer referencia en tu pagina a tus componentes utilizando el parametro rendered="al booleano correpondiente", el rendered muestra o no el componente si es verdadero o falso el valor q le pases.

Espero te sea de utilidad este tip,

Saludos,

ANR

Utiliza un backing bean para el formulario

Hola.

Si necesitas generar dinamicamente todo tu componente, puedes construir el árbol de componentes desde el código Java y referenciar este componente raíz desde el xhtml.

Estoy en un proyecto similar y así lo estamos generando actualmente.

Aquí se construye un árbol de componentes de ejemplo. En nuestro proyecto la lista de campos se lee desde la base de datos. La variable a contiene

UIPanel container = new HtmlPanelGrid();
UIComponent componente = //se crea una instancia de un componente para el campo.
componente.setId("formInput"+inputCounter++); //se le coloca un id incremental
UIComponent etiqueta = //se crea una etiqueta para el campo.
container.getChildren().add(etiqueta);
container.getChildren().add(componente);
HtmlMessage message=new HtmlMessage();
message.setFor(componente.getId());
container.getChildren().add(message);

Aquí el facelet apunta al backing bean:

    <h:form binding="#{formBean.vistaFormulario}">
            <ice:commandButton value="Guardar"/>
    </h:form>
Imagen de Gallosuarez

Posible solución ...

Marce:

Que tal, un gusto en saludarte. Bueno pues la verdad es que también soy nuevo en eso de la programación web en general y en JSF en particular. Pero he estado revisando este biblioteca de clases (es software libre), y se ve bastante interesante.
http://www.primefaces.org/showcase/ui/home.jsf
Ahí biene un ejemplo precisamente de lo que quieres hacer. Aca otro ejemplo:
http://fractalsoft.net/primeext-showcase-mojarra/sections/dynaform/basic...

Espero que te sea de utilidad.
Saludos,
Gerardo Suárez Trejo