我用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"/>
答案 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;)然后看看会发生什么。