我有一个selectOneRadio,可以选择“语音”和“数据”。
然后,我有一个selectOneMenu,其中两个选项都带有“无数据选项”,其他选项则取决于所选的单选按钮。
因此,如果我选择“语音”,则在“无数据选项”,“ Office”,“ Office premium”和“ Office premium plus”下拉菜单中有,而如果我选择“数据”,则有“无数据选项”,“数据开始”, “数据媒介”和“数据溢价”。
我使用f:ajax解决了自动下拉内容更改,并且效果很好。
现在,如果在下拉菜单中选择了“无数据选项”,则将显示警告(下拉菜单附近的小文本)。
因此,我定义了outputLabel并根据下拉菜单中所选项目的值来设置值。
一切正常,直到我在单选按钮中更改选择为止。例如:-页面加载,默认情况下选择“语音”和“无数据选项”,并显示警告标签。-在下拉菜单中选择“办公室”,警告消失-然后选择“数据”;下拉列表会刷新并显示新项目,并选择“无数据选项”,但不会出现警告。
如果我在下拉菜单中选择其他项目,然后返回“无数据选项”,则会出现;只是当我从“语音”切换到“数据”(反之亦然)时,由于某种原因,渲染无法正常工作...
这是我的代码;首先是带有对应ajax的单选按钮,用于呈现下拉菜单,然后是带有相应ajax的下拉菜单,用于呈现警告标签,最后是标签,其值取决于下拉菜单中的所选项目。
我希望我对问题的描述足够清楚。如果没有,请问一下,我会更精确的说:)
<h:selectOneRadio id="subscriptionType" value="#{detailModel.afterObject.subscriptionType}">
<f:selectItems value="#{detailModel.subscriptionTypeValues}" />
<f:ajax execute="@this" render="dataOptions" />
</h:selectOneRadio>
<h:selectOneMenu id="dataOptions" value="#{detailModel.dataOption}">
<f:selectItems value="#{detailModel.dataOptionsBySubscriptionType}" var="sdo" itemLabel="#{sdo.dataOptionName}" itemValue="#{sdo}"/>
<f:converter converterId="ch.ethz.id.cmn.DataOptionConverter" />
<f:ajax execute="@this" render="noDataOptionChoosenLabel" />
</h:selectOneMenu>
<h:outputLabel id="noDataOptionChoosenLabel"
value="#{ (detailModel.dataOption == null or detailModel.dataOption.dataOptionName == detailModel.noDataOption) ? msg.subscriptionFormNoDataOptionChoosen : ''}"
style="font-style: italic; font-size:9px; color:red;"/>
我认为您希望ajax事件通过组件“传播”,这会很好,但它不会那样工作。您必须手动更新和重置它们。
因此,在顶层(广播),您必须重置detailModel.dataOption并呈现其他两个组件:
<f:ajax listener="#{detailModel.resetDataOption}"
render="dataOptions noDataOptionChoosenLabel"
/>
(您可以省略execute =“ @ this”,因为它是默认设置)
public void resetDataOption(AjaxBehaviorEvent event) {
dataOption=null;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句