gpt4 book ai didi

jsf - ViewParam 与 @ManagedProperty(值 = "#{param.id}")

转载 作者:行者123 更新时间:2023-12-01 22:38:52 27 4
gpt4 key购买 nike

像这样定义 View 参数有什么区别:

<f:metadata>
<f:viewParam name="id" value="#{someBean.id}"/>
</f:metadata>

并在 ManagedBean 中定义属性,如下所示:

@Inject @ManagedProperty(value = "#{param.id}")
private Integer id;

最佳答案

<f:viewParam> :

示例:

<f:metadata>
<f:viewParam id="user_id" name="id" value="#{bean.user}"
required="true" requiredMessage="Invalid page access. Please use a link from within the system."
converter="userConverter" converterMessage="Unknown user ID."
/>
</f:metadata>
<h:message for="user_id" />

private User user;

和一个 @FacesConverter("userConverter") 。调用页面 http://example.com/context/user.xhtml?id=123将通过id通过转换器参数并设置User对象作为 bean 属性。

<小时/>

@ManagedProperty :

  • 在 bean 构造后立即设置值。

  • 设置值在 @PostConstruct 期间可用。它允许根据设置值轻松初始化/预加载其他属性。

  • 是否不允许允许在 View 中进行声明性转换/验证。

  • 是否支持自动包含在结果目标网址中。

  • 可以在任何范围的 bean 上使用,但它只会在 bean 构造期间设置,而不是在每个请求时设置。

示例:

@Inject @ManagedProperty("#{param.id}")
private Long id;

private User user;

@EJB
private UserService userService;

@PostConstruct
public void init() {
user = userService.find(id);
}

请注意,每当 user 时,您都必须自己管理转换和验证。是 null通过摆弄 FacesContext#addMessage() 里面@PostConstruct方法。另请注意,当 #{param.id}不是一个有效的数字,那么在 @PostConstruct 之前会抛出异常被击中。如果你想处理它,那么你最好将其设置为 private String id 。但更好的是使用 <f:viewParam> .

<小时/>

@PostConstruct 时,您可以同时使用它们。和includeViewParams是必须的。您将无法再应用细粒度的转换/验证。

<小时/>

另请参阅:

关于jsf - ViewParam 与 @ManagedProperty(值 = "#{param.id}"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4888942/

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