【发布时间】:2013-03-01 20:55:09
【问题描述】:
我根据<h:message for="" /> JSF 对象有一个问题。我有一个 JSF 1.1(是的,不幸的是)myFaces 项目。我准备了一个带有标签、inputText 和消息持有者的简单 JSP 文件:
<h:form id="sacLinkForm">
<cblFaces:outputLabel for="dedicatedCashAccountNumber"
value="#{appBundle.KUSTA_DEDICATED_CASH_ACCOUNT_NUMBER}"/>
<t:inputText id="dedicatedCashAccountNumber"
value="#{createController.modelFE.sacLink.dedicatedCashAccountNumber}"/>
<h:message id="dedicatedCashAccountNumberError"
for="dedicatedCashAccountNumber" />
</h:form>
我还创建了简单的验证方法:
public static boolean validate(SACLink link) {
boolean isError = false;
FacesContext context = FacesContext.getCurrentInstance();
FacesMessage message = new FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_ERROR);
if (StringUtils.isEmpty(link.dedicatedCashAccountNumber)) {
//MessageUtils.addErrorMessage("dedicatedCashAccountNumber", "Dedicated Cash Account Number is mandatory");
message.setSummary("Field mandatory");
message.setDetail("Dedicated Cash Account Number is mandatory");
context.addMessage("sacLinkForm:dedicatedCashAccountNumber", message);
isError = true;
}
return !isError;
}
我的问题在于sacLinkForm:dedicatedCashAccountNumber,因为编译后的 JSP 生成了 id(例如 _idJsp12:DynTab2:DynView2:tabK.....er:vKustaMa....Controller:sacLinkForm:dedicatedCashAccountNumber),这可能导致 addMessage 方法与 h:message for=".." 属性不对应。
所以消息没有正确显示,因为 java 找不到正确的h:message 对象。有什么方法可以从 Java 将消息设置为正确的h:message?我假设没有办法在 JSF 1.1 页面中强制“恒定”组件 ID。
谢谢。
【问题讨论】:
-
您是否尝试将 prependId="false" 添加到表单中?并使用 dedicatedCashAccountNumber 代替 sacLinkForm:dedicatedCashAccountNumber
-
@Laabidi:
prependId在 JSF 1.2 中引入。 OP 正在使用 JSF 1.1。 -
抱歉,我确认了。我只是在检查(在怀疑之后)。甚至 prependId 在 JSF 1.1 中也不可用
-
正如@BalusC 所写。在下一个 JSF 版本中添加了 prependId 和其他 Id 修饰符。 ://