例如,以下代码段:
<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中的冒号。
答案 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" />
- 即你将无法使用自动生成的容器名称。
我建议反对这样的事情 - 我没有看到为什么:
应该更改为-