我正在使用 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 设置输入值并单击命令按钮时,输入字段中的数据就会消失。
这是如何引起的,我该如何解决。
我正在使用 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 设置输入值并单击命令按钮时,输入字段中的数据就会消失。
这是如何引起的,我该如何解决。
那是因为属性设置为readonly
. 如果这true
为 ,则 JSF 不会处理提交的值,因此模型不会被更新。如果您想将其设置为readonly
呈现视图并让 JSF 处理提交的值,那么您需要使其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 ap:calendar readonly。