Flo*_*umé 5 jsp el code-injection java-ee cdi
在JSP中,可以使用EL表达式(如$ {myBean.myAttribute})来使用CDI托管bean.这里没问题.
我想在JSP文件中使用@Inject的"常规注入"(即不使用EL表达式),例如:<%!@Inject MyBean myBean; %>然后是<%= myBean.getMyAttribute()%>.即使使用EL表达式可以实现该示例,其他一些用例也不能.
这似乎并不完全支持应用程序服务器:
- JBoss 6.0.0,JBoss 6.1.0,Resin 4.0.22:好的,它运行得很好.
- JBoss 7.0.1,GlassFish 3.x(测试了几个版本):FAILS,myBean仍为null.
它应该在JSP中正常工作,因为:
(1)它根据各种相关规范在servlet中正常工作;
(2)JSP在运行时被转换为servlet.
你们知道我想要做的事情是否得到支持?任何内部/实施信息可能?
最好的祝福.
感谢您的时间.
有趣的问题,如果你没有测试过它,我会赌一些钱,因为它不起作用;-)
CDI 构建于托管 bean (JSR 316) 之上。相应的定义非常宽松(故意):
从规格来看:
可以通过使用 javax.annotation.ManagedBean 注释来注释其类来声明托管 Bean。托管 Bean 不能是:最终类、抽象类、非静态内部类。与常规 JavaBean 组件不同,托管 Bean 可能不可序列化。
在基本组件模型中,托管 Bean 必须提供无参构造函数,但是基于托管 Bean 构建的规范(例如 CDI (JSR-299))可以放宽这一要求,并允许托管 Bean 为构造函数提供更复杂的签名,
可能发生的情况是容器扫描类路径并碰巧找到已编译的 JSP servlet。自从我上次看到它以来已经有一段时间了,但我记得代码已生成,所有内容(包括脚本)都落在doGet()
或doPost()
......!?因此,尽管它们在定义上并没有被正式取消资格,但我怀疑 JSP scriplet 是否是您想要将其视为托管 bean 的任何东西。老实说,感觉非常错误;-)
我关注 CDI / Weld / Seam 邮件列表已经有一段时间了,不记得曾经提到过 JSP。与谷歌搜索此连接相同。
因此,您不应该依赖 CDI 来处理 scriptlet。恕我直言,这种行为比故意的行为具有更多的副作用,并且可以在未来的版本中删除,恕不另行通知(甚至不被注意到:-)
因此,对 JB Nizet 的建议+1:将 servlet 与 CDI 结合使用,但不使用 JSP。
更新:我试图提供帮助,而不是制造混乱;-) 我的观点是:恕我直言,在 JSP 中使用 CDI 感觉真的非常错误,但我没有在相关规范中找到任何可以证明这一点的内容。我只能说,JSP从未在任何地方被提及——这支持了我的直觉(并且符合某些实现确实考虑它,而其他实现则不考虑的观察结果)。
归档时间: |
|
查看次数: |
6862 次 |
最近记录: |