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

bra*_*rry 9 html java jsf facelets

例如,以下代码段:

<h:form id="levelone">
    <h:inputText id="leveltwo" value="Test" />
</h:form>
Run Code Online (Sandbox Code Playgroud)

生成以下标记:

<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>
Run Code Online (Sandbox Code Playgroud)

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

例如,我想改变

levelone:leveltwo
Run Code Online (Sandbox Code Playgroud)

levelone-leveltwo
Run Code Online (Sandbox Code Playgroud)

背景

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

Bal*_*usC 13

这是不是在JSF 1.x的可能,但由于JSF 2.x的,你可以把它定义web.xmlinit-paramjavax.faces.SEPARATOR_CHAR.

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

因此,例如

#levelone\:leveltwo {
    color: blue;
}
Run Code Online (Sandbox Code Playgroud)

应该适用于普通的浏览器(对于你需要的IE6/7 #levelone\3A leveltwo).

当您打算将它与jQuery或任何其他JavaScript框架一起使用时,同样适用于CSS选择器的帮助:

var leveltwo = $('#levelone\\:leveltwo');
Run Code Online (Sandbox Code Playgroud)


或者,你也可以给它一个styleClass你可以与CSS类相关联的东西.因此,例如

<h:inputText styleClass="myinput" />
Run Code Online (Sandbox Code Playgroud)

产生

<input type="text" class="myinput" />
Run Code Online (Sandbox Code Playgroud)

可以用

.myinput {
    color: blue;
}
Run Code Online (Sandbox Code Playgroud)

也可以看看