JSF 2.0:点击单选按钮后立即渲染组件

时间:2013-12-23 09:04:33

标签: ajax jsf

当用户选择专家单选按钮时,我想使用“expert”作为值渲染另一个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>

2 个答案:

答案 0 :(得分:0)

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

首先,检查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应该已经警告过您。

另见:

答案 1 :(得分:-1)

谢谢,我发现了问题。

问题是我的xhtml页面包含了身体所代表的形式,而不是

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

你的整改对我也有帮助,谢谢你:)。