【问题标题】:rendered attribute on inputTextinputText 上的渲染属性
【发布时间】:2010-07-12 15:39:35
【问题描述】:

我有一个绑定到包含 4 个输入文本字段的支持 bean 的搜索表单。我正在使用的设计表明用户应该能够看到搜索结果,但它们不应该是可编辑的。如果托管 bean 为空,我决定使用 render 属性显示输入,如果不是,则显示输出文本标记:

<t:inputText styleClass="inputText" id="name" rendered="#{not searchCriteria.fieldsEntered}"
value="#{searchCriteria.name}" autocomplete="off"></t:inputText>
<h:outputText value="#{searchCriteria.name}" rendered="#{searchCriteria.fieldsEntered}"></h:outputText>                                     

显示部分工作正常,但我注意到当输入多个搜索字段时,只有第一个字段存储在托管 bean 中。

我从 inputText 中删除了一个渲染属性,这确实导致了我的问题。我可以推断出这里发生了什么,但我不明白为什么。

我相信在这种情况下我只会删除 outputText 标记并将渲染更改为禁用。我只是好奇为什么我最初的计划不正确。

【问题讨论】:

    标签: jsf


    【解决方案1】:

    rendered="false" 将导致输入元素不被渲染,因此它的值不会被提交到服务器端。如果您使用的是请求范围的 bean,则不会设置初始值。您想将 bean 放在会话范围内,或者在 h:outputText 旁边添加一个 h:inputHidden,将值传输到后续请求。

    由于您已经在使用Tomahawk's t:inputText,我建议您使用其displayValueOnly 属性而不是rendered 属性和互补的h:outputText

    一言难尽:

    <t:inputText displayValueOnly="#{searchCriteria.fieldsEntered}" ... />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 2014-09-22
      相关资源
      最近更新 更多