在JSF中从支持bean设置ID

在JSF中从支持bean设置ID,jsf,Jsf,这合法吗 <h:form id="status${a.myID}" > // ... </h:form> // ... 其中“a”是支持bean中的对象。这似乎很管用,但当我查看呈现的HTML时,我看到的id是::0:status,而不是我所期望的:status0。我的主要问题是试图引用中的id,实际上${a.myID}这并没有呈现任何输出。当您将:0:status作为表单ID时,这意味着:0是HTML树结构中:status的父级 单字母变量名${a}和迭代索引(如

这合法吗

<h:form id="status${a.myID}" >
// ...
</h:form>

// ...

其中“a”是支持bean中的对象。这似乎很管用,但当我查看呈现的HTML时,我看到的id是:
:0:status
,而不是我所期望的
:status0
。我的主要问题是试图引用
中的id,实际上
${a.myID}
这并没有呈现任何输出。当您将
:0:status
作为表单ID时,这意味着
:0
是HTML树结构中
:status
的父级

单字母变量名
${a}
和迭代索引(如
:0
自动追加到客户端ID中)的症状表明,该
位于JSF迭代组件(如
中,带有
var=“a”
)的内部,实际上是而不是支持bean。它将确认并解释迄今为止描述的所有症状。如果
${a}
是一个真正的支持bean(而不是一个迭代变量),那么它将“起作用”,并且您将看到
:0:status0
:1:status0
:2:status0
,等等,尽管其有用性值得怀疑

首先,JSF组件的
id
属性是在视图构建时评估和设置的,视图构建时是基于XHTML源代码文件构建JSF组件树的时刻。JSF迭代组件的
var
属性是在视图呈现时设置的,视图呈现时是基于JSF组件树生成HTML输出的时刻。因此,逻辑结果是,
var
属性设置的对象在需要设置
id
属性时不可用,因此计算结果为空/空字符串。效果与您将要执行的操作完全相同

<h:form id="status">

JSF迭代组件已经自动将迭代索引附加到生成的客户端ID。在组件ID中手动设置迭代项的ID没有任何意义。JSF组件树中只有一个组件在物理上是的,该组件在运行过程中被多次重用基于当前迭代轮生成HTML输出

这一问答也应该引起更多的思考:


回到您在
中引用组件的具体功能需求,您肯定需要以不同的方式解决这个问题。不幸的是,您没有清楚地描述源组件和目标组件的上下文,因此不可能给出/解释正确的客户端ID,因此我只是给您一个链接,以便您可以自己找到它:



与具体问题无关,旧的JSP EL样式
${…}
在Facelets中具有与
{…}
完全相同的效果。为了避免您自己和您未来的维护人员混淆,建议完全禁止使用
${…}
,并始终坚持使用
{…}
。另请参见

您是否尝试过使用
状态{a.myID}
而不是
状态${a.myID}
来命名表单
状态表单
并使用
引用它?AFAIK不支持这样设置id。最好使用相对id来引用组件。您可以使用绝对值,但应该为从父级到最后一个子级的每个组件分配id。