9

例如,以下代码段:

<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 中的冒号。

4

3 回答 3

13

这在 JSF 1.x 中是不可能的,但从 JSF 2.x 开始,您可以在web.xmlas init-paramof .x 中定义它javax.faces.SEPARATOR_CHAR

也就是说,我猜你只是想改变它,因为你想让你的 CSS 工作,是吗?冒号:是CSS标识符中的一个特殊字符,它代表一个伪选择器。如果这个原因对您来说是正确的,那么很高兴知道您可以通过\.

因此,例如

#levelone\:leveltwo {
    color: blue;
}

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

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

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


或者,您也可以只给它一个styleClass您反过来可以与 CSS 类相关联的东西。因此,例如

<h:inputText styleClass="myinput" />

这会产生

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

可以搭配

.myinput {
    color: blue;
}

也可以看看

于 2010-01-27T11:43:27.220 回答
2

在旧版本中,不,这是不可能的。它是一个硬编码常数。在 2.0 中,您可以更改它。请参阅此博客文章

于 2010-01-26T21:59:22.740 回答
2

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

我建议不要这样做-我看不出:应该将其更改为的正当理由-

于 2010-01-26T22:00:16.817 回答