2011-03-16 74 views
1

我有一個selectOneRadio菜單,其中包含一些selectItem。我想顯示基於屬性文件的選項。例如,如果商店沒有信用卡讀卡器,那麼我不會顯示信用選項。應該有一個配置/屬性文件,指定顯示的內容和不顯示的內容。基於屬性文件渲染SelectItem

有沒有辦法做到這一點?我假設我需要將屬性文件讀入支持bean,然後獲得類似'呈現'屬性的東西。但是,我只是嘗試和'呈現'似乎並沒有爲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> 

回答

2

使用<f:selectItems>根據包文件提供List<SelectItem>。通過這種方式,您可以使用通常的Java代碼來控制是否應添加項目。

E.g.

<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"))); 
    } 

    // ... 
}