我有一个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")));
}
// ...
}