1

我用 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"/>
4

2 回答 2

2

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

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

因此,如果您的分隔符是_,那么您不应在组件 ID 中的任何地方使用它。因此,逻辑上的结果是改为使用-

也可以看看:

于 2012-04-13T03:15:39.237 回答
1

如果您的分隔符是“_”,那么我认为您在 id 字段中使用下划线混淆了查找算法。

尝试删除下划线(从“date_m”到“datem”),然后看看会发生什么。

于 2012-04-13T01:02:34.840 回答