我正在使用JSF 1.1。我有一个带有请求范围bean和只读输入字段的JSF页面。
<h:inputText id="dt" value="#{bean.sdate}" readonly="#{bean.disable}" />
<a onclick="cal('dt');"><img src="fr.gif" border="0"></a>
当我使用JavaScript设置输入值并单击命令按钮时,输入字段中的数据将消失。
这是如何引起的,我该如何解决呢?
答案 0 :(得分:19)
那是因为该属性设置为readonly
。如果这评估true
,则JSF不会处理提交的值,因此模型不会更新。如果要在呈现视图并让JSF处理提交的值时将其设置为readonly
,那么您需要将其设置为评估true
仅渲染响应阶段。您可以使用FacesContext#getRenderResponse()
。您需要在isDisable()
方法中执行此操作。
public boolean isDisable() { // TODO: rename to isReadonly().
return FacesContext.getCurrentInstance().getRenderResponse();
}
注意:在JSF2中,您也可以在视图中通过FacesContext#getCurrentInstance()
访问#{facesContext}
,这样可以在模型中保存一些样板:
<h:inputText ... readonly="#{facesContext.renderResponse}" />
另请注意,当您使用JSF2 <f:viewParam>
时,此方法不再适用于GET请求。另请参阅Make a p:calendar readonly以获取解释和解决方法。