【问题标题】:JSF 2.0: Immediately render a component after hitting a radio buttonJSF 2.0:点击单选按钮后立即渲染组件
【发布时间】:2013-12-23 09:04:32
【问题描述】:

当用户选择专家单选按钮时,我想渲染一个额外的 outputText,其值为“专家”。我尝试了带有事件、侦听器和渲染属性的 ajax,但没有任何效果。

这是我的表格:

<h:form>
    <h:selectOneRadio id="rb" value="#{account.dtype}">
        <f:selectItem itemId="user" itemValue="user" itemLabel="User" />
        <f:selectItem itemId="admin" itemValue="admin" itemLabel="Admin" />
        <f:selectItem itemId="expert" itemValue="expert" itemLabel="Expert" />
        <f:ajax execute="@this" render="choice"/>
    </h:selectOneRadio>
    <br />
    <h:outputLabel id="choice" value="#{account.dtype}" rendered="#{account.dtype}=='expert'" />
</h:form>

【问题讨论】:

  • 在 JSF 2.x 中,属性 itemId 未在组件 selectItem 中定义:您的页面将无法工作。请补充相关缺失信息
  • @perissf,它实际上可以工作,因为默认情况下会忽略不存在的属性。如果Account#Dtype 是具有必要getter 和setter 方法的String,它应该。无论如何,问题是缺少资源,因为正在使用托管 bean。
  • 您觉得答案有用吗?如果有帮助,请将其标记为已回答,否则请发表评论以便我改进。

标签: ajax jsf


【解决方案1】:

您发布的代码包含多个错误。

首先,检查 account.dtype 的 EL 公式中有一个错误:大括号外的所有内容都被评估为纯文本字符串,因此您的公式计算为字符串 expert=='expert' 而不是布尔值.你必须使用:

<h:outputLabel id="choice" value="#{account.dtype}" rendered="#{account.dtype == 'expert'}" />

(或使用eq 代替== 运算符)

其次,要更新的组件必须存在于 DOM 树中,否则无法更新其渲染状态。因此,将它包装在一个始终呈现的组件中,并改为使用 ajax 更新它。例如,您可以更新整个表单:

<f:ajax execute="@this" render="@form"/>

最后,虽然这没有任何作用,但请注意,属性 itemId 没有在组件 selectItem 中定义,将被 JSF 忽略。你的 IDE 应该已经警告你了。

另见:

【讨论】:

    【解决方案2】:

    谢谢,我找到问题了。

    问题是我的 xhtml 页面包含正文而不是 的表单,而不是

    我还使用了 click ajax 事件而不是“执行”。

    您的纠正也帮助了我,谢谢:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 2011-12-12
      • 2022-08-13
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      相关资源
      最近更新 更多