6

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

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

4

1 回答 1

19

那是因为属性设置为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

于 2012-04-30T18:26:18.910 回答