JSF selectOneRadio项目带图片,如何设置单选按钮CHECKED

时间:2014-04-24 11:09:28

标签: javascript jquery jsf jsf-2 icefaces

我想在JSF中实现以下UI。

[RadioButton] [图片] [标签]

[RadioButton] [图片] [标签]

[RadioButton] [图片] [标签]等等......

实现以下代码后,UI看起来不错。但是当我点击任何单选按钮时,虽然bean类被valueChanged事件更新,但UI中没有出现选择(未检查无线电)。那么如何设置selectOneRadio?

JSF代码:

    <!-- payment options -->
    <ui:repeat value="#{shoppingCartBean.paymentMethods}" var="m">

        <!-- radio button -->
        <div style="float:left;">
            <ice:selectOneRadio  
                value="#{shoppingCartBean.selectedPaymentMethod}"
                layout="pageDirection" 
                partialSubmit="true" 
                valueChangeListener="#{shoppingCartHandler.valueChanged}">     
                <f:selectItem itemLabel="" itemValue="#{m}"/>  
            </ice:selectOneRadio>  
        </div>           

        <!-- card image -->
        <div style="float:left;">
            <ice:graphicImage  value="#{layoutBean.currentImagesPath}/#{m}.png"/> 
        </div>

        <!-- payment method description or label -->
        <div style="padding: 10px">
            <ice:outputText value="#{bundleMessages.messages[m]}"/>
        </div>

        <div style="clear:both;"></div>
    </ui:repeat>

    <!-- payment options end-->

和bean类中的方法:

    public List<String> getPaymentMethods() {
        List<String> paymentMethods = new ArrayList<String>();
        paymentMethods.add("crditcard");
        paymentMethods.add("directbanking");
        paymentMethods.add("paypal");
        return paymentMethods;
    }

    public String getSelectedPaymentMethod() {            
        return this.selectedPaymentMethod;
    }

    public void setSelectedPaymentMethod(String selectedPaymentMethod) {
        this.selectedPaymentMethod = selectedPaymentMethod;
    }
处理程序类中的

和valueChanged事件:

    public void valueChanged(ValueChangeEvent event) {
        String value = null;
        if (event.getSource() instanceof HtmlSelectOneRadio) {
            value = ((String) event.getNewValue());
        }
        if (value != null) {
            this.shoppingCartBean.setSelectedPaymentMethod(value);
        }
    }

1 个答案:

答案 0 :(得分:0)

实际上,radioOneButton&#39; value =&#34;#{shoppingCartBean.selectedPaymentMethod}&#34;&#39;用空或错字符串多次覆盖。因此,单选按钮中始终显示错误或无选择。

我做了以下解决方法,以避免错误地设置&quot; selectedPaymentMethod&#39; Bean类中的属性。并确保选择了付款方式&#39;只会通过&#39; valueChanged&#39;更新Handler类中的方法。

Handler类的valueChanged事件中所做的更改:

public void valueChanged(ValueChangeEvent event) {        
    String value = null;
    if (event.getSource() instanceof HtmlSelectOneRadio) {
        value = ((String) event.getNewValue());
    }
    if (value != null) {
        this.shoppingCartBean.setPaymentMethod(value);
    }
}

Bean类中的修改:

public void setSelectedPaymentMethod(String selectedPaymentMethod) {
    // DO NOTHING, Leave this method empty
}

public void setPaymentMethod(String paymentMethod) {
    this.selectedPaymentMethod = paymentMethod;
}

现在&#39; getSelectedPaymentMethod&#39;始终返回当前选定的单选项,以便检查正确的单选项。