gpt4 book ai didi

jsf - 转换器="entityConverter"与转换器="#{entityConverter}"的区别

转载 作者:行者123 更新时间:2023-12-05 03:14:04 25 4
gpt4 key购买 nike

converter="entityConverter"converter="#{entityConverter}" 有区别吗?

最初,我的应用程序使用这样的代码可以正常工作:

<p:selectOneMenu id="civilityId"
value="#{customerController.selected.civilityId}"
converter="civilityConverter"> ...

但是当我将 converter="civilityConverter" 更改为 converter="#{civilityConverter}" 时,

我收到这个错误:

Grave:   Error Rendering View[/customer/index.xhtml]
javax.el.PropertyNotFoundException: /customer/Edit.xhtml @30,186
value="#{customerController.selected.civilityId}":
Target Unreachable, 'null' returned null

感谢您的帮助。

最佳答案

虽然这不是特定于 <p:selectOneMenu> , 只检查它的 tag documentation 是值得的如果它给出任何提示。它说了以下内容:

Name: converter

Type: javax.el.ValueExpression (must evaluate to java.faces.convert.Converter)

Description: An el expression or a literal text that defines a converter for the component. When it's an EL expression, it's resolved to a converter instance. In case it's a static text, it must refer to a converter id.

所以,如果是

converter="entityConverter"

它将被解析为通过 @FacesConverter 声明的转换器 ID转换器类上的注释

@FacesConverter("entityConverter")
public class EntityConverter implements Converter {}

<converter-id>输入 <converter>注册 faces-config.xml :

<converter>
<converter-id>entityConverter</converter-id>
<converter-class>com.example.EntityConverter</converter-class>
</converter>

并且,如果是

converter="#{entityConverter}"

它将被解析为一个具体的Converter EL 上下文中的实例。将此类实例放入 EL 上下文的正常方法是将其声明为托管 bean。例如。通过 JSF

@ManagedBean
@RequestScoped
public class EntityConverter implements Converter {}

或通过 CDI

@Named
@RequestScoped
public class EntityConverter implements Converter {}

通常这样做是为了能够注入(inject) @EJB进入其中,以便可以执行任何必要的业务/数据库逻辑。在即将推出的 JSF 2.3 之前,@FacesConverter (和 @FacesValidator )即不支持依赖注入(inject)(但是您可以使用 JSF 实用程序库 OmniFaces 来解决)。

另见:

关于jsf - 转换器="entityConverter"与转换器="#{entityConverter}"的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27354994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com