Aquí es JSF código:

<h:inputText binding="#{bean.input}" />

Y aquí es una parte de la copia de frijol para la unión de apoyo:

private HtmlInputText input;

public void setInput(HtmlInputText input) {
    this.input = input;
}

public HtmlInputText getInput() {
    return this.input;
}

Cuando abro la página en un primer momento todo funciona bien pero cuando lo abro en el segundo tiempo (actualizar o abrir la misma url en otra pestaña o en cualquier otra forma) puedo obtener duplicados de error de ID. Mensaje de Error que dice que <h:inputText> no tiene IDENTIFICADOR único. Aquí está una parte de la larga mensaje de error:

java.lang.IllegalArgumentException: Component ID formId:inputId has already been found in the view
    +id: inputId type: javax.faces.component.html.[email protected]

El problema se produjo después de que he añadido binding atributo. Si me lo quite, todo va a funcionar bien de nuevo. ¿Cómo utilizar correctamente binding atributo?

OriginalEl autor Roman | 2010-01-20

2 Comentarios

  1. 32

    Duplicado componente de IDENTIFICACIÓN de los errores pueden ocurrir cuando:

    • Mismo ID se utiliza en diferentes componentes dentro de la misma NamingContainer.
    • Físicamente diferentes componentes están enlazados a la misma propiedad de la misma bean.
    • La <f:subview> se ha declarado en la página de incluir en lugar de la página principal.
    • El mismo incluir la página se incluye múltiples veces dentro de la misma NamingContainer.
    • Un componente sido creadas de forma dinámica sin tener una explícita de IDENTIFICACIÓN asignado.

    Aquí, NamingContainer es, entre otros, la <h:form>, <h:dataTable> y <f:subview>.

    Cuando se utiliza binding, debe enlazar a una propiedad que se utiliza exclusivamente por el componente en cuestión en una base por solicitud. Su caso específico indica que esta unión es compartida por varios componentes, tal vez a través de las diferentes solicitudes. Al enlazar el componente a una propiedad de un backing bean, entonces el respaldo de frijol no debe absolutamente ser en un ámbito más amplio que el ámbito de petición. Véase también JSF 2.0 specitication capítulo 3.1.5 (el énfasis es mío):

    3.1.5 Componente De Enlaces

    Componente de enlaces se utilizan a menudo en combinación con JavaBeans que son instancias dinámicas a través de la Bean Gestionado la Creación de la instalación (consulte la Sección 5.8.1 «VariableResolver y el Defecto VariableResolver»). Se recomienda que los desarrolladores de aplicaciones lugar managed beans que son señaladas por componente expresiones de enlace en «petición» de alcance. Esto es debido a que la colocación de ella en la sesión o en el ámbito de la aplicación requeriría hilo de seguridad, ya que UIComponent instancias depende de que se ejecuta dentro de un solo hilo. También hay efectos potencialmente negativos en la gestión de la memoria cuando la inclusión de un componente de unión en «sesión» ámbito de aplicación.

    Véase también:

    Backing bean tiene un ámbito de sesión. Este bean se va a utilizar sólo por este componente. ¿A qué te refieres diciendo: ‘exclusivamente’?
    Por lo tanto, distintas solicitudes de opiniones dentro de la misma sesión es compartir el mismo enlace? Esto no siempre va a funcionar tan bien. Poner en un ámbito de petición de frijol.
    Voy a evitar la unión en todo y encontrar la solución adecuada. Pero me pregunto ¿es normal comportamiento de enlace (es decir, a partir de especificaciones)? Puedo obtener el mismo resultado con el estándar de componentes jsf? O depende?
    Eh? Sólo hay que poner en la solicitud de alcance y uso posterior. Usted puede incluso hacer que un niño de la sesión en el ámbito de frijol. Otra causa puede ser también que el componente se ha utilizado en un include/composición de archivo y que está incluido/reutilizar varias veces dentro de la misma página.
    Gracias por la lista de posibles problemas. Su segundo punto me dio una idea que getLineChartComponent() método devuelve null (en mi caso no rompe ninguna funcionalidad, estoy interesado en el método setter).

    OriginalEl autor BalusC

  2. 1

    Yo tenía el mismo problema hasta que se encontró con esta etiqueta, que evit el duplicado identificador de componente

    <f:subview id="top">
                    <p:outputPanel id="panelHeader1"  
                        binding="#{circularRequestBean.panelHeader}" autoUpdate="true"
                        class="col-md-12 col-sm-12 col-xs-12 col-lg-12 wihtoutPadding"
                        style="padding:0px; !important; display:block;" />
    
                </f:subview>

    OriginalEl autor Marcos Lopez Uchiha

Dejar respuesta

Please enter your comment!
Please enter your name here