2012-07-12 25 views
8

Soy bastante nuevo en JSF y PrimeFaces y tengo un par de problemas al desarrollar un diseño de página completa con menús múltiples.Actualización de página dinámica en el diseño de primas anidadas

NÚMERO # 1

Tenemos un diseño de página completa usando PrimeFaces 3.3 con unidades de disposición anidada en el lado izquierdo de la siguiente manera:

<p:layoutUnit id="west" position="west" header="Services" resizable="true" closable="true" collapsible="true" effect="drop"> 
      <p:layout>           
       <p:layoutUnit id="inner_center" position="center">       
        <h:form id="formMainMenu"> 
         <ui:include src="#{menuBean.pageToDisplay}.xhtml" /> 
        </h:form>    
       </p:layoutUnit> 
       <p:layoutUnit id="inner_south" size="200" position="south">          
        <h:form id="formStartMenu"> 
         <p:menu> 
          <p:submenu label="Start Menu">          
           <p:menuitem value="Start" actionListener="#{#menuBean.setPageToDisplay('template/menu/start')}" update=":inner_center" />          
          </p:submenu> 
         </p:menu> 
        </h:form> 
       </p:layoutUnit> 
      </p:layout> 
     </p:layoutUnit> 

Aquí es el bean de respaldo:

@ManagedBean(name = "menuBean") 
@SessionScoped 
public class menuBean implements Serializable { 

private String pageToDisplay = "template/menu/main"; 

public String getPageToDisplay() { 
    return this.pageToDisplay; 
} 

public void setPageToDisplay(String pageToDisplay) { 
    this.pageToDisplay = pageToDisplay; 
} } 

Cuando hago clic en el elemento del menú, toda la LayoutUnit (inner_c enter) desaparece. He intentado numerosas combinaciones de formularios y controles de panel junto con Ajax y no puedo cargar la segunda página y el menú. Tal vez mi enfoque es incorrecto debido a mi conocimiento limitado en JSF. Espero que sea algo simple y me lo estoy perdiendo.

Desde una acción de menúArtículo, quiero cargar otro bean de menú PrimeFaces en la unidad de diseño de inner_center .. ¿Tal vez no necesito hacer esto y simplemente llamar al menú a través de Ajax?

NÚMERO # 2 Con estas unidades de diseño anidado, cuando la página se carga, el encabezado LayoutUnit principal "Servicios" desaparece por completo.

<p:layoutUnit id="west" position="west" header="Services" resizable="true" closable="true" collapsible="true" effect="drop"> 

Cualquier ayuda o consejo sobre el enfoque general es muy apreciada!

Gracias!

+0

Alguna información del entorno: Mojara 2.1, Primefaces 3.3, NetBeans IDE 7.0.1 + Glassfish –

+0

No puedo asegurarlo, pero este problema puede ocurrir si las páginas insertadas tienen un componente de formulario. Las formas anidadas causarán problemas. –

+0

Gracias. Está en lo correcto ... se recomienda que los formularios se coloquen dentro de los controles de layoutUnit, lo que hice ... también asegurándome de que no haya etiquetas de formulario en las páginas cargadas. Voy a intentar de nuevo usando '' y PanelGroup. Tal vez una referencia está apagada. IDEALLY, me gustaría omitir la carga de una página y colocar un menú directamente en la layoutUnit y poblarla dinámicamente pasando un valor. '' ..no estoy seguro de la mejor manera. –

Respuesta

2

Esta pregunta parece ser muy popular, así que me siento obligado a compartir, al menos, las soluciones que hemos llegado con manejar el diseño general de la aplicación basada en numerosos otros desbordamiento de pila Q & A, mi propia experimentación, los estándares de JSF, BalusC, e innumerables personas y blogs que han contribuido a la curva de aprendizaje.

ANTECEDENTES -

Nuestra aplicación es una solución de gestión de servicios de nivel empresarial que se suministra con una interfaz de usuario y cualquier número de módulos con licencia. Revisamos OSGI y otros marcos de aplicaciones pesados, pero nos decidimos por un proyecto de Enterprise Maven con una administración liviana de .jar a través de archivos de configuración y configuraciones de bases de datos. Usamos objetos de entidad respaldados por mySQL, pasando solo objetos a la UI.

SOLUCIÓN -

Para nuestro lanzamiento inicial, hemos creado una plantilla de página web JSF basado en este diseño: http://www.mkyong.com/jsf2/jsf-2-templating-with-facelets-example/

La idea es tener la interfaz de usuario sea completamente dinámico de la siguiente manera:

  1. JSF aplicación Core Design

    • basada en datos de aplicaciones JavaEE Empresa Maven
    • Parcialmente procesamiento de una sola página a través de Ajax
    • Seguridad PhaseListener (ayuda con cuestiones Global Ajax)
    • Manejo de errores PhaseListener (ayuda con cuestiones Global Ajax)
  2. Seguridad

    • Estamos utilizando la seguridad basada en el reino de Glassfish. Con JSF 2.2, puede anotar fácilmente directorios, controles, páginas, métodos para la administración de roles granulares.
  3. navegación

    • dinámicamente construido a partir de configuración XML basado en la función de usuario en el reino.

    • La navegación dinámica y los formularios se administran a través de los beans de ámbito según sea necesario. Este enlace contiene tantas buenas respuestas a los problemas reales que se encontrará: Contenido de http://balusc.blogspot.com/2011/09/communication-in-jsf-20.html

  4. plantilla y controles

    • contenido se entrega a través de objetos pobladas por entidades. La mayoría de todos los datos provienen de la base de datos. Solo la inicialización de la aplicación base se realiza a través de un archivo de configuración local.

    • La generación de control se realiza a través de un archivo de propiedades xml para cualquier dato de objeto que necesite gestionarse a través de la interfaz de usuario.

Como saben, el agujero del conejo tiene muchos túneles. Si hay alguna parte del diseño de nuestra aplicación que se asemeje a la suya y desea más información y/o ejemplos de código, no dude en preguntar y publicaré en este hilo para que otros sigan aprendiendo.

Cuestiones relacionadas