当前位置: 首页 > 知识库问答 >
问题:

从选择一个菜单JSF[重复]中选择自定义对象

章景同
2023-03-14

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

我的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>

我的管理Bean类:

@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;
    }

}

共有2个答案

郤旭东
2023-03-14

可以为自定义对象货币创建转换器。

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

第2步:只需在转换器类中声明类似@FacesConverter(“电流转换器”)的内容,或者如果您想在Converter类中使用Spring Inject或自动安装注释,请使用@Component(“电流转换器”)注释声明您的Converter类,不要使用@FacesConverter。并且您的转换器类应该在组件扫描包中。

步骤3:使用converter属性在SelectOne菜单中声明转换器。

如果您仍然有任何问题,请参考此链接

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

郑和泰
2023-03-14

您正在尝试将类Currency的Java对象映射到作为HTTP请求参数的字符串。转换器适用于需要从its字符串表示创建对象的情况,反之亦然,就像您面临的情况一样。

基本上有两种方法。

1.利用转换器。

使用这种方法,您将项目值定义为货币对象,并使用转换器从对象创建字符串表示形式,并从字符串重新创建对象。对于转换器部分,只需按照Luiggi指向的教程进行操作。基本上,您需要创建一个实现Converter的类,用@FacesConverter("电流转换器")注释它,以便能够通过id引用转换器,如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.使用纯Strings(或java原语包装器)。

使用这种方法,您可以将项目值以及用户选择绑定到String类型的bean属性,而不是实际对象。以这种方式使用它,您不需要任何转换器,字符串值将为您设置:

<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>

最后,值得阅读问题的答案为什么选择OneMenu将ItemLabel发送到转换器?。

 类似资料:
  • 我想从“选择一个”菜单中选择自定义对象。它既不显示错误也不显示值。怎么办?请帮帮我。提前谢谢。 现在我在getAsObject的这一行看到空指针异常: 这是我的xhtml文档 这是我的管理豆类。 这是我的currencyConverter类代码:

  • 我正在使用选择一个菜单从

  • 我是打字新手。我想从可观察的 这是我可以观察到的 预期结果: 可以不创建数组并在for循环中推送ID吗。

  • 我正在JBoss上使用QueryDSL-JPA,希望在某一点上从一个不同的表中选择一个实体,而不是我通常使用并通过@table进行注释的表。我不想创建一个单独的Java类,因为最终,它应该返回给我与我正在使用的相同的类。

  • 我想调用一个函数时,选择的任何选项。类似于这样: 但不知何故不起作用。有人能帮忙吗。 请注意 我不想捕获更改事件,如果我选择已经选择选项,则不会触发更改事件

  • 我正在使用Selenium webdriver。我无法从右键单击打开的选项中选择(例如第二个)选项。 在我当前的代码中,我可以右键单击webElement,但无法从右键单击后打开的列表中选择选项,因为它会自动消失。 因此,有了这段代码,我可以右键单击,但右键单击菜单会自动消失。我想从右键菜单中选择第二个选项。 请帮助!!!