tag java html jsf facelets

java - tag - ¿Es posible cambiar el separador de identificador de elemento en JSF?



jsf html tag reference (3)

Por ejemplo, el siguiente fragmento:

<h:form id="levelone"> <h:inputText id="leveltwo" value="Test" /> </h:form>

genera el siguiente marcado:

<form id="levelone" name="levelone" method="post" action="/test/testPage.html" enctype="application/x-www-form-urlencoded"> <input id="levelone:leveltwo" type="text" name="levelone:leveltwo" value="Test" /> </form>

¿Es posible cambiar los identificadores generados automáticamente para usar un separador diferente de dos puntos?

Por ejemplo, me gustaría cambiar

levelone:leveltwo

a

levelone-leveltwo

Fondo

Estamos utilizando el marco de aplicación de JavaScript de Mojo en nuestra aplicación web, y no parece que le gusten los dos puntos en el ID.


Tomahawk tiene componentes extendidos, como <t:inputText> que tienen el atributo forceId . Allí tendrá que configurarlo como <t:inputText forceId="levelone-leveltwo" /> - es decir, no podrá usar el nombre del contenedor generado automáticamente.

Aconsejaría en contra de tal cosa. No veo una razón válida por la cual : debería cambiarse a -



Esto no es posible en JSF 1.x, pero desde JSF 2.x puedes definirlo en web.xml como init-param de javax.faces.SEPARATOR_CHAR .

Dicho eso, supongo que solo querías cambiarlo porque quisieras que tu CSS funcione, ¿o sí? El dos puntos : es un carácter especial en los identificadores CSS, representa un pseudo selector. Si esta razón es verdadera para usted, entonces sería bueno saber que puede escapar de caracteres especiales en CSS de la manera habitual con / .

Por lo tanto, por ejemplo

#levelone/:leveltwo { color: blue; }

debería funcionar para navegadores normales (para IE6 / 7 necesita #levelone/3A leveltwo en #levelone/3A leveltwo lugar).

Lo mismo se aplica cuando tiene la intención de usarlo con jQuery o cualquier otro marco de JavaScript que selecciona elementos con la ayuda de selectores de CSS :

var leveltwo = $(''#levelone//:leveltwo'');


Alternativamente, también puede darle un styleClass que a su vez puede correlacionar con una clase de CSS. Por lo tanto, por ejemplo

<h:inputText styleClass="myinput" />

que genera

<input type="text" class="myinput" />

se puede diseñar con

.myinput { color: blue; }

Ver también