gpt4 book ai didi

java - 非请求范围 Bean 中的 @ManagedProperty(value = "#{param.id}")

转载 作者:太空狗 更新时间:2023-10-29 22:37:02 26 4
gpt4 key购买 nike

我需要将参数 (POST) 传递给 @managedBean,我使用了这样的托管属性:

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

Bean的作用域是ViewScope

我最终遇到了这个错误:

Unable to create managed bean receipt. The following problems were found: - The scope of the object referenced by expression #{param.id}, request, is shorter than the referring managed beans scope of view

我能做什么?

arjan 看看:

我的页面: 小标题

<form method="post" action="faces/index.xhtml">
<input name="id" value="4" />
<input type="submit" value="submit" />
</form>

<h:form>
<h:commandLink value="click" action="index">
<f:param id="id" name="id" value="20"/>
</h:commandLink>
</h:form>

最佳答案

两种方式:

  1. 使 bean 请求具有作用域,并将 View 作用域作为另一个注入(inject) @ManagedProperty

    @ManagedBean
    @RequestScoped
    public class RequestBean {

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

    @ManagedProperty(value="#{viewBean}")
    private ViewBean viewBean;
    }

    View 作用域 bean 在 @PostConstruct 和请求作用域 bean 的操作方法期间可用。您只需要记住,当您在没有参数的情况下回发到同一 View 时,id 可能会丢失。

  2. 或者,在 bean 初始化期间从请求参数映射中手动获取它。

    @ManagedBean
    @ViewScoped
    public class ViewBean {

    private Integer id;

    @PostConstruct
    public void init() {
    id = Integer.valueOf(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id"));
    }
    }

    这样,初始 id 在整个 View 范围内都可用。

关于java - 非请求范围 Bean 中的 @ManagedProperty(value = "#{param.id}"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4579711/

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