JSF gera Id duplicado: id=javax.faces.viewstate

503 views
Skip to first unread message

Jairson Cabral

unread,
Apr 14, 2009, 2:36:56 PM4/14/09
to PBJug
Pessoal,

Estou usando o JSF RI 1.2_04 e há um problema com a rederização do
html, que não chega a ser um erro, mas acaba produzindo uma página
html em desacordo com o padrão recomendado pela W3C. Sempre que tenho
mais de um h:form em uma mesma página todos eles renderizam o input
para identificação do ViewSate com o mesmo id: <input type="hidden"
name="javax.faces.ViewState" id="javax.faces.ViewState" value="...."/>

usando o validador disponível em http://validator.w3.org/check temos o
seguinte erro:

<i>
ID "javax.faces.ViewState" already defined

…n" name="javax.faces.ViewState" id="javax.faces.ViewState"
value="j_id5:j_id6

An "id" is a unique identifier. Each time this attribute is used in a
document it must have a different value. If you are using this
attribute as a hook for style sheets it may be more appropriate to use
classes (which group elements) than id (which are used to identify
exactly one element).
</i>

Alguém que já passou por isso poderia dar uma idéia de como resolver?

Grato,

Jairson M. Cabral

Rodrigo Galba

unread,
Apr 14, 2009, 3:12:13 PM4/14/09
to pb...@googlegroups.com
vc pode (e deve) definir seus proprios ids dos componentes.
Se tiver mais de um form, entao defina os ids desses forms.
Outra coisa, não é recomendado usar mais de um form no JSF, pois cada form vai gerar uma arvore de componentes (ViewRoot) separada, e acho que isso dificulta o controle do JSF sobre os componentes. Use subforms dentro de um único form (arvore de componentes).

2009/4/14 Jairson Cabral <jairso...@yahoo.com.br>



--
--------------------------------------------
Rodrigo Galba
Java Developer
www.rodrigogalba.com.br

Jairson Cabral

unread,
Apr 14, 2009, 4:36:02 PM4/14/09
to PBJug
Rodrigo,

Todos os ids de todos os componentes estão definidos. O id do input
que guarda o View State é definido pelo JSF e não pelo desenvolvedor.
HTML não suporta forms aninhados. O Tomahawk tem uma tag t:subform que
talvez resolva o problema, mas prefiro tentar por outro caminho, já
que subform é um conceito diferente do que queremos implementar.

Obrigado pela contribuição

On 14 abr, 16:12, Rodrigo Galba <rodrigoga...@gmail.com> wrote:
> vc pode (e deve) definir seus proprios ids dos componentes.
> Se tiver mais de um form, entao defina os ids desses forms.
> Outra coisa, não é recomendado usar mais de um form no JSF, pois cada form
> vai gerar uma arvore de componentes (ViewRoot) separada, e acho que isso
> dificulta o controle do JSF sobre os componentes. Use subforms dentro de um
> único form (arvore de componentes).
>
> 2009/4/14 Jairson Cabral <jairsoncab...@yahoo.com.br>
>
>
>
>
>
> > Pessoal,
>
> > Estou usando o JSF RI 1.2_04 e há um problema com a rederização do
> > html, que não chega a ser um erro, mas acaba produzindo uma página
> > html em desacordo com o padrão recomendado pela W3C. Sempre que tenho
> > mais de um h:form em uma mesma página todos eles renderizam o input
> > para identificação do  ViewSate com o mesmo id: <input type="hidden"
> > name="javax.faces.ViewState" id="javax.faces.ViewState" value="...."/>
>
> > usando o validador disponível emhttp://validator.w3.org/checktemos o

Rafael Ponte

unread,
Apr 14, 2009, 4:46:09 PM4/14/09
to pb...@googlegroups.com
Parece realmente ser um bug da especificação,
https://issues.apache.org/jira/browse/MYFACES-1700

2009/4/14 Jairson Cabral <jairso...@yahoo.com.br>



--
Rafael Ponte
http://www.rponte.com.br

Rafael Ponte

unread,
Apr 14, 2009, 4:57:18 PM4/14/09
to pb...@googlegroups.com
Situação meio complicada. Talvez, se possível, seja melhor você reformular sua página para trabalhar apenas com um único formulário e abusar um pouco de componentes do tipo subform.

Isso é um caso isolado, ou está por toda a aplicação?

2009/4/14 Rafael Ponte <rpo...@gmail.com>

Rafael Ponte

unread,
Apr 14, 2009, 5:04:38 PM4/14/09
to pb...@googlegroups.com
Dando uma olhada na wiki/faq da Mojarra eu encontrei isso,
http://wiki.glassfish.java.net/Wiki.jsp?page=JavaServerFacesRI

Mais especificamente o parâmetro "com.sun.faces.enableViewStateIdRendering":
If true, the view state hidden field will be rendered with both the id and name attributes having the value of "javax.faces.ViewState".This is what the spec requires, however, if there are multiple forms within a view and the response content-type is XHTML, the result will be XHTML that will fail validation due to multiple ID attributes with the same value: javax.faces.ViewState. Setting this parameter to false will result in the ID attribute not being rendered. Keep in mind however, that doing this may break integration with AJAX frameworks that get the state field via ID. See issue 433 for details.

Talvez quebre algo com algum framework AJAX (como Richfaces ou Trinidad), mas é apenas uma possibilidade. Faça alguns testes e depois nos diga algo :))

2009/4/14 Rafael Ponte <rpo...@gmail.com>

Jairson Cabral

unread,
Apr 14, 2009, 5:39:16 PM4/14/09
to PBJug
Rafael,

Acho que chegamos ao mesmo ponto. Eu já tinha visto este site. Este
parâmetro foi introduzido na versão do JSF RI 1.2_08, mas por questão
de compatibilidade com o container OC4J 10.1.3.1, temos que usar a
versão 1.2_04. Acho que vamos ter que promover a velha gambi. Como é
triste para um arquiteto ter que recorrer a isso :(

Mas mesmo assim, valeu muito a sua contribuição

On 14 abr, 18:04, Rafael Ponte <rpo...@gmail.com> wrote:
> Dando uma olhada na wiki/faq da Mojarra eu encontrei isso,http://wiki.glassfish.java.net/Wiki.jsp?page=JavaServerFacesRI
>
> Mais especificamente o parâmetro "*com.sun.faces.enableViewStateIdRendering*
> ":
>
> > If true, the view state hidden field will be rendered with both the id and
> > name attributes having the value of "javax.faces.ViewState".This is what
> > the spec requires, however, if there are multiple forms within a view and
> > the response content-type is XHTML, the result will be XHTML that will fail
> > validation due to multiple ID attributes with the same value:
> > javax.faces.ViewState. *Setting this parameter to false will result in the
> > ID attribute not being rendered.* Keep in mind however, that *doing this
> > may break integration with AJAX frameworks that get the state field via ID
> > *. See issue 433 for details.
>
> Talvez quebre algo com algum framework AJAX (como Richfaces ou Trinidad),
> mas é apenas uma possibilidade. Faça alguns testes e depois nos diga algo
> :))
>
> 2009/4/14 Rafael Ponte <rpo...@gmail.com>
>
>
>
> > Situação meio complicada. Talvez, se possível, seja melhor você reformular
> > sua página para trabalhar apenas com um único formulário e abusar um pouco
> > de componentes do tipo subform.
>
> > Isso é um caso isolado, ou está por toda a aplicação?
>
> > 2009/4/14 Rafael Ponte <rpo...@gmail.com>
>
> > Parece realmente ser um bug da especificação,
> >>https://issues.apache.org/jira/browse/MYFACES-1700
>
> >> 2009/4/14 Jairson Cabral <jairsoncab...@yahoo.com.br>

Rafael Ponte

unread,
Apr 14, 2009, 8:40:36 PM4/14/09
to pb...@googlegroups.com
OC4J? iê, iê.. Nunca vi ninguém falando bem desse container :))
Boa sorte!

2009/4/14 Jairson Cabral <jairso...@yahoo.com.br>
Reply all
Reply to author
Forward
0 new messages