是否可以在JSF中更改元素id分隔符?

时间:2010-01-26 21:53:40

标签: java html jsf facelets

例如,以下代码段:

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

生成以下标记:

<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>

是否可以更改自动生成的ID以使用与冒号不同的分隔符?

例如,我想改变

levelone:leveltwo

levelone-leveltwo

背景

我们在webapp中使用Mojo JavaScript应用程序框架,它似乎不喜欢id中的冒号。

3 个答案:

答案 0 :(得分:13)

这在JSF 1.x中是不可能的,但是从JSF 2.x开始,您可以在web.xml中将其定义为init-param的{​​{1}}。

那就是说,我想你只是想改变它,因为你想让你的CSS工作,是吗?冒号javax.faces.SEPARATOR_CHAR是CSS标识符中的特殊字符,它表示伪选择器。如果这个原因适合你,那么知道你可以通过:通常的方式转义CSS中的特殊字符可能会很好。

因此,例如

\

应该适用于普通浏览器(对于IE6 / 7,您需要#levelone\:leveltwo { color: blue; } )。

如果您打算将其与jQuery或任何其他JavaScript框架一起使用,并在CSS selectors的帮助下选择元素,则同样适用:

#levelone\3A leveltwo


或者,你也可以给它一个var leveltwo = $('#levelone\\:leveltwo'); ,你可以将其与CSS类相关联。因此,例如

styleClass

生成

<h:inputText styleClass="myinput" />

可以用

设置样式
<input type="text" class="myinput" />

另见

答案 1 :(得分:2)

在旧版本中,不可能。它是一个硬编码常数。在2.0中,您可以更改它。请参阅this blog post

答案 2 :(得分:2)

Tomahawk具有扩展组件,例如具有<t:inputText>属性的forceId。在那里你必须将它设置为<t:inputText forceId="levelone-leveltwo" /> - 即你将无法使用自动生成的容器名称。

我建议反对这样的事情 - 我没有看到为什么:应该更改为-

的正当理由