JSF 2.0无法在视图中找到组件ID

时间:2012-04-13 00:06:11

标签: jsf-2

我用date_m给出了输入文本的id。当我尝试访问该页面时,它会出现错误,指出在视图中找不到组件ID date_m。但是当id更改为date-m时,我不会收到此错误。 JSF不允许id的下划线吗?在我们的项目中,javax.faces.SEPARATOR_CHAR是下划线。

<h:inputText id="date_m" value="{bean.month}"/>
<h:message id="error" for="date_m"/>

2 个答案:

答案 0 :(得分:2)

组件ID不应包含与分隔符相同的字符。这是默认分隔符为:的原因。您不能在组件ID中使用它,它将根据UIComponent#setId()的规则失效,但在HTML元素ID中是允许的。

但是,如果将javax.faces.SEPARATOR_CHAR上下文参数的默认分隔符更改为组件ID中允许的字符,则在指定组件ID时应小心两倍。您应该确保不使用组件ID中的分隔符,否则UIViewRoot#findComponent()方法可能会中断。 JSF在内部使用此方法按客户端ID查找组件。

因此,如果您的分隔符是_,那么您应该在组件ID中使用 nowhere 。因此,合乎逻辑的结果是使用-代替。

另见:

答案 1 :(得分:1)

如果你的分隔符是&#34; _&#34;那么我认为你通过在id字段中使用下划线来混淆查找算法。

尝试删除下划线(从&#34; date_m&#34;到&#34; datem&#34;)然后看看会发生什么。