当用户选择专家单选按钮时,我想使用“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>
答案 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”。
你的整改对我也有帮助,谢谢你:)。