<h:inputtext readonly =“true”>中的数据在单击命令按钮时消失</h:inputtext>

时间:2012-04-30 12:51:19

标签: jsf

我正在使用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设置输入值并单击命令按钮时,输入字段中的数据将消失。

这是如何引起的,我该如何解决呢?

1 个答案:

答案 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以获取解释和解决方法。