我用 date_m 给出了输入文本的 id。当我尝试访问该页面时,它给出了一个错误,说组件 id date_m not found in view。但是当 id 更改为 date-m 时,我没有收到此错误。JSF 不允许 id 下划线吗?在我们的项目中,javax.faces.SEPARATOR_CHAR 是下划线。
<h:inputText id="date_m" value="{bean.month}"/>
<h:message id="error" for="date_m"/>
我用 date_m 给出了输入文本的 id。当我尝试访问该页面时,它给出了一个错误,说组件 id date_m not found in view。但是当 id 更改为 date-m 时,我没有收到此错误。JSF 不允许 id 下划线吗?在我们的项目中,javax.faces.SEPARATOR_CHAR 是下划线。
<h:inputText id="date_m" value="{bean.month}"/>
<h:message id="error" for="date_m"/>
组件 ID 不应包含与分隔符相同的字符。这就是为什么默认分隔符是:
. 不能在组件 ID 中使用,根据 的规则会失效UIComponent#setId()
,但在 HTML 元素 ID 中是允许的。
但是,如果您通过javax.faces.SEPARATOR_CHAR
上下文参数将默认分隔符更改为组件 ID 中允许的字符,那么在指定组件 ID 时应格外小心。您应该确保不要在组件 ID 中完全使用分隔符,否则该UIViewRoot#findComponent()
方法可能会中断。JSF 在内部使用此方法按客户端 ID 查找组件。
因此,如果您的分隔符是_
,那么您不应在组件 ID 中的任何地方使用它。因此,逻辑上的结果是改为使用-
。
如果您的分隔符是“_”,那么我认为您在 id 字段中使用下划线混淆了查找算法。
尝试删除下划线(从“date_m”到“datem”),然后看看会发生什么。