我正在使用基于SEAM的JSF Web应用程序。我有一个简单的表单,其中包含一个查找(弹出窗口),用于检索类别名称和ID(两者都检索没有问题,并存储在myView中)。当查找返回时,类别名称用于填充“selectedCategoryName”(使用Jquery)。
当您尝试提交表单时会出现问题,而另一个字段未通过验证(缺少简单的必填字段)。我的所有其他字段保持不变,但selectedCategoryName被清除(即使bean仍然具有它的值,因此修复验证错误并重新提交解析为正确的提交)。所以我的问题是,当表单验证失败时,如何保持显示“selectedCategoryName”中的值?
提前致谢!
<s:decorate id="selectedCategoryField" template="/layout/edit.xhtml">
<span>
<h:panelGroup rendered="#{! myView.persisted}">
<img class="lookup" src="${request.contextPath}/images/lookup.gif" width="15" height="14" alt=""
title="Category Lookup"
onclick="return openNewWindow('${CategoryLookupUrl}?#{myView.lookupParameters}', 'id');"/>
</h:panelGroup>
<h:inputText id="selectedCategoryName" required="true"
value="#{myView.selectedCategoryName}"
size="50"
readonly="true">
<a:support event="onchanged" reRender="selectedCategoryField" ajaxSingle="true"/>
<a:support event="oninputchange" reRender="selectedCategoryField" ajaxSingle="true"/>
</h:inputText>
</span>
答案 0 :(得分:2)
问题是,由于readonly="true"
,实际上bean没有保留选定的值。将该属性应用于UIInput时,将不会在提交中处理UIInput。
要解决此问题,您可以执行以下操作:
如果您使用JSF2,则可以使用readonly="#{facesContext.renderResponse}"
代替
如果没有,请在您的支持bean上定义方法isReadonly
并使用readonly="#{myView.isReadonly}"
。
public boolean isReadonly() {
return FacesContext.getCurrentInstance().getRenderResponse();
}
请查看以下类似问题,特别是有关其工作原理的详细信息的答案: Data in <h:inputText readonly="true"> disappears when command button is clicked