当前位置: 首页 > 面试题库 >

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

孟新知
2023-03-14
问题内容

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

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

Bean的范围是ViewScope

我最终遇到此错误:

无法创建托管bean收据。发现了以下问题:-由表达式#{param.id} request引用的对象的范围比引用托管Bean的视图范围要短。

我能做什么?

arjan看看:

我的页面:Facelet标题

<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请求成为作用域,然后将视图合并为另一个@ManagedProperty
        @ManagedBean
    @RequestScoped
    public class RequestBean {

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

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

视图范围的bean@PostConstruct请求范围的bean
期间和操作方法中可用。您只需要记住,在id不带参数的情况下回发到同一视图时,可能会丢失。

  1. 或者,在bean初始化期间从请求参数映射中手动获取它。
        @ManagedBean
    @ViewScoped
    public class ViewBean {

        private Integer id;

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

这样id,在整个视图范围内都可以使用首字母缩写。



 类似资料:
  • 我试图用jsf和CDI编写一个简单的登录表单。问题是当我注入我的SessionScoped bean时,它不像我期望的那样工作。这是我的豆子 这是我的控制器: 还有一个简单的Jsf表单,它调用login函数并显示LoginInfo类的计数器字段。 通过单击登录按钮和调试变量,我可以看到“lo”是这样的: lo={LoginInfo$Proxy$_$$_WeldClientProxy@16688}“

  • 我得到的错误是: 我检查的内容: > 已启用批注处理,否则AnyService根本不会实例化 AnyBean不是最终的 请求作用域在AnyBean中与AspectJ代理(ScopedProxyMode.target_class)一起定义 存在EnableAspectJAutoproxy批注 类路径上有以下JAR: Web XML还包含RequestContextListener: 当我向org.s

  • 我有一个web应用程序,它有一个Spring集成逻辑,在一个单独的线程中运行。问题是,在某个时候,我的Spring集成逻辑尝试使用请求范围的bean,然后我得到以下错误: 我有ContextLoaderListener设置: 我的作用域Bean是这样注释的(因为我听说代理我的Bean会有帮助): 我所做的可能吗?如果是,我在这里遗漏了什么?如果没有,关于我如何实现这一目标,还有其他建议吗?

  • 无论 Struts2 还是 Spring,都提供了一种控制器: 每次请求,创建实例,使用后即抛弃。 这样的控制器的好处就是可以放心的吧 request 和 response 对象放心的存成它的私有 属性,反正使用一次后就丢掉了。 在 Nutz.Mvc,所谓控制器,实际上就是 Module,默认的,所有的模块都是整个应用程序唯一的, 除非你在 Ioc 配置文件里另有说明。 那么 Nutz 可以做到每

  • 问题内容: 我正在尝试在Spring中建立一个请求范围的bean。 我已经成功设置好了,所以每个请求创建一次bean。现在,它需要访问HttpServletRequest对象。 由于该bean是每个请求创建一次的,所以我认为容器可以轻松地将请求对象注入到我的bean中。我怎样才能做到这一点 ? 问题答案: 可以将请求范围的Bean与请求对象自动连接。