我有一个selectOneRadio菜单,其中包含一些selectItem。我想显示基于属性文件的选择。例如,如果商店没有信用卡阅读器,那么我不会显示信用卡选项。应该有一个config / properties文件,用于指定显示的内容和未显示的内容。

有没有办法做到这一点?我假设我需要将属性文件读入支持Bean,然后具有类似“ rendered”的属性。但是,我只是尝试过,“渲染”似乎不适用于selectItem。

<h:selectOneRadio id="selectedPaymentMethod" layout="pageDirection"
        value="#{selectPaymentMethodAction.selectedPaymentMethod}">

    <f:selectItem itemValue="online" itemLabel="#{paymentMsg['payment.online.lbl']}"/>
    <f:selectItem itemValue="cash" itemLabel="#{paymentMsg['payment.cash.lbl']}"/>
    <f:selectItem itemValue="credit" itemLabel="#{paymentMsg['payment.credit.lbl']}"/>
    <f:selectItem itemValue="debit" itemLabel="#{paymentMsg['payment.debit.lbl']}"/>

</h:selectOneRadio>

最佳答案

使用<f:selectItems>,并根据捆绑文件将其与List<SelectItem>一起使用。这样,您可以使用常规Java代码控制是否应添加项目。

例如。

<f:selectItems value="#{selectPaymentMethodAction.paymentMethods}" />




private List<SelectItem> paymentMethods; // +getter

public Bean() {
    paymentMethods = new ArrayList<SelectItem>();
    ResourceBundle bundle = ResourceBundle.getBundle("com.example.Messages", FacesContext.getCurrentInstance().getViewRoot().getLocale());

    if (condition) {
        paymentMethods.add(new SelectItem("online", bundle.getString("payment.online.lbl")));
    }

    // ...
}

10-08 20:06