这不是一个RichFaces问题。这是JSF。 JSF为每个组件添加一个唯一的ID。这是一个已知的JSF功能。
但是,你可以做些什么。 在您的<h:form>
中,您可以设置prependId="false"
。这将告诉JSF不要从每个组件添加任何ID。
(还要确保您使用的不是s:decorate="/layout/template.xhtml
因为template.xhtml
和edit.xhtml
将增加自己的ID的
所以做这样的事情:
<h:form prependId="false">
<a4j:repeat value="#{foo}" var="f" rowKeyVar="row">
<h:inputText id="unique#{row}"/>
</a4j:repeat>
</h:form>
这将使ID是这样的: unique1 unique2 unique3 etc
更新
似乎你是对的。由于某种原因,id
标签不支持这种类型的EL表达式。
我试过如下:
<a:repeat id="table" value="#{foo}" var="k" rowKeyVar="row">
<h:inputText id="test#{row}" value="row is #{row}" styleClass="test#{row}"/><br/>
</a:repeat>
而且它产生生成的HTML
<input type="text" class="test0" value="row is 0" name="table:0:test" id="table:0:test">
<input type="text" class="test1" value="row is 1" name="table:1:test" id="table:1:test">
<input type="text" class="test2" value="row is 2" name="table:2:test" id="table:2:test">
因此,大家可以看到,我仍然得到一个唯一的ID,因为。可能会自动为我添加数字。
如果您添加或不没关系。结果是一样的。
这是行不通的。我不认为你能够将EL指定为id的一部分(至少不在重复元素内)。在我身边的EL要么被评价为0或者什么都没有,尽管同样的表达在其他地方正确评估(例如,它工作在outputPanel的title属性而不是id属性中)。如果我能做到这一点,我的问题就会解决。 – NRaf 2011-01-24 20:58:32