使用f:ajax基于选择框更改更新屏幕内容

时间:2012-07-18 13:26:55

标签: ajax jsf-2 richfaces

我正在使用带有Richfaces 4的JSF2。

我有以下JSF:

<h:panelGrid columns="2" cellspacing="5">
    <h:outputLabel value="#{msg.FrequencyOfSpending}" />

    <h:selectOneMenu id="ruleFrequencyOptions" value="#{Rule.ruleControls.ControlOne.controlParams.Period.valueSelected}" styleClass="commonSelect">
        <f:selectItems value="#{Rule.ruleControls.ControlOne.controlParams.Period.validValues}" itemLabelEscaped="true" />
        <f:ajax event="valueChange" listener="#{Rule.ruleControls.ControlOne.controlParams.Period.valueSelectedChange}" onerror="handleAjaxError" />
    </h:selectOneMenu>
</h:panelGrid>

<a4j:repeat value="#{Rule.ruleParams.Action.properties}" var="RuleParamProperty" id="budgetRuleIterator">

    <h:panelGrid columns="4" cellspacing="5" columnClasses="ruleParamCheckbox, ruleParamAction, ruleParamActionFrequency, ruleParamActionInput">

        <h:selectBooleanCheckbox value="#{RuleParamProperty.selected}">
            <a4j:ajax event="click" listener="#{RuleParamProperty.selectedChange}"  onerror="handleAjaxError" />
        </h:selectBooleanCheckbox>

        <h:outputText value="#{msg[RuleParamProperty.name]}" />

        <h:panelGrid columns="3">
            <h:outputText value="#{msg.Action_1}" />
            <h:outputText value="#{msg[Rule.ruleControls.ControlOne.controlParams.Period.valueSelected]}" id="ruleActionFrequency" class="italic-text" />   
            <h:outputText value="#{msg.Action_3}" />
        </h:panelGrid>

        <h:inputText value="#{RuleParamProperty.inputValue}" />

    </h:panelGrid>

</a4j:repeat>


每当有人从 ruleFrequencyOptions 选择框中选择一个新值时,我需要在这里反映/显示新值:

<h:outputText value="#{msg[Rule.ruleControls.ControlOne.controlParams.Period.valueSelected]}" id="ruleActionFrequency" class="italic-text" />


h:outputText 上分配ID并在f:ajax上使用 render 属性不起作用,因为JSF的自动生成了Id!

有没有一些方法可以附加到 f:ajax compoent来实现这个目的?

1 个答案:

答案 0 :(得分:0)

试试这个:

<h:panelGroup id="toUpdate">
    <a4j:repeat value="#{Rule.ruleParams.Action.properties}" var="RuleParamProperty" id="budgetRuleIterator">
        ...
    </a4j:repeat>
</h:panelGroup>

然后将render="toUpdate"放入<f:ajax>