从选择选择自定义对象的一个​​菜单JSF [复制](Pick Custom Object from

2019-08-18 10:08发布

这个问题已经在这里有一个答案:

  • 如何填充h的选择:从数据库selectOneMenu用于? 5个回答

我想选择从选择一个菜单的自定义对象。 它既不显示错误也不值。 我该怎么办?

我的XHTML文档:

<h:panelGrid columns="2">
    <p:outputLabel value="" />
        <p:selectOneMenu id="CurrencyMenu" value="#{CurrencyMB.currency}" >
            <f:selectItem itemLabel="-- Select Currency--" itemValue="#{null}"/>
        <f:selectItems value="#{CurrencyMB.currencyList}" var="currency"  itemValue="#{currency.currencyId}" itemLabel="#{currency.currencyName}" > 
            </f:selectItems>
        <p:ajax update="currencyOut" />
        </p:selectOneMenu>
        <p:outputLabel value="Currency Id : #{CurrencyMB.currency.currencyId}" id="currencyOut" />
</h:panelGrid>

我managedBean类:

@ManagedBean(name = "CurrencyMB")
@RequestScoped
public class CurrencyManagedBean {

private Currency currency;
private List<Currency> currencyList;


public Currency getCurrency() {
        return currency;
    }

public void setCurrency(Currency currency) {
        this.currency = currency;
    }
public List<Currency> getCurrencyList() {
        currencyList = new ArrayList<Currency>();
        currencyList.addAll(getiCurrencyService().getCurrencies());
        return currencyList;
    }

public void setCurrencyList(List<Currency> currencyList) {
        this.currencyList = currencyList;
    }

}

Answer 1:

您正在尝试类的Java对象映射Currency随附作为HTTP请求参数字符串。 A转换器的目的是在一个情况下使用时,您需要创建从它的字符串表示的对象,反之亦然,就像在你的情况面对。

基本上有两种方法。

1.利用转换器

通过这种方法,你定义项的值作为Currency的对象,并使用一个转换器从一个对象创建的字符串表示并重新创建一个对象从一个字符串返回。 该转换器部分,只要按照教程Luiggi指向。 基本上你需要创建一个实现类Converter ,以将其标注为@FacesConverter("currencyConverter")能够通过ID来引用该转换器,就像在converter="currencyConverter"一个JSF标签的属性:

<p:selectOneMenu id="CurrencyMenu" value="#{CurrencyMB.currency}" converter="currencyConverter">
    <f:selectItems value="#{CurrencyMB.currencyList}" var="currency"  itemValue="#{currency}" itemLabel="#{currency.currencyName}" /> 
    <p:ajax update="currencyOut" />
</p:selectOneMenu>

2.利用纯String S(或Java原始包装)。

通过这种方法您绑定的项目值,以及用户选择的bean属性String类型,而不是一个实际的对象。 使用它,这样你就不需要任何转换器,和字符串值会为你设置:

<p:selectOneMenu id="CurrencyMenu" value="#{CurrencyMB.currencyName}">
    <f:selectItems value="#{CurrencyMB.currencyList}" var="currency"  itemValue="#{currency.currencyName}" itemLabel="#{currency.currencyName}" /> 
    <p:ajax update="currencyOut" />
</p:selectOneMenu>

最后,值得一读的问题的答案,为什么selectOneMenu用于发送ItemLabel到转换器? 。



Answer 2:

您可以为您的自定义对象货币创造转换器。

第1步:创建一个转换器类并实现javax.faces.convert.Converter接口,,重写器getAsObject和符getAsString方法,写你的逻辑字符串对象转换和对象到字符串转换。

第2步:在您的转换器类简单的声明类似@FacesConverter(“currencyConverter”),或者如果你想使用Spring注入或自动装配Autowired诠释转换器类@Component(“currencyConverter”)注释声明你的转换器类,并且不使用@ FacesConverter.And你的转换器类应在组件扫描包。

第3步:声明你的转换器selectOneMenu用于使用转换器性能。

如果您还有任何问题,请参考以下链接

http://www.techpages.org/jsf/jsf-custom-object-converter-from-selectonemenu/2428/



文章来源: Pick Custom Object from Select one menu JSF [duplicate]