我想从选择一个菜单中选择一个自定义对象。它既不显示错误也不显示值。我该怎么办?
我的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;
}
}
可以为自定义对象货币创建转换器。
第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/
您正在尝试将类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.使用纯String
s(或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,但无法从右键单击后打开的列表中选择选项,因为它会自动消失。 因此,有了这段代码,我可以右键单击,但右键单击菜单会自动消失。我想从右键菜单中选择第二个选项。 请帮助!!!