java - 是否可以通过 JBoss EL 解析器在 EL 中使用对象作为函数参数?

标签 java jsf jboss facelets el

JBoss EL resolver online documentation中有这句话:

It's important to fully understand how this extension to EL works. When the page is rendered, the parameter names are stored (for example, hotel.id and user.username), and evaluated (as value expressions) when the page is submitted. You can't pass objects as parameters!

但是在我不小心读到这个提示之前,我已经在我的项目中使用了对象作为函数参数,并且它起作用了!这怎么可能?我担心现在有一些魔法......

编辑:请注意,我实际上使用完全有值(value)的对象作为参数,我们的框架堆栈(MyFaces、Facelets、Trinidad、Spring、Webflow)没有任何问题,我问如何这可能吗。例如,我可以在 xhtml 模板中执行此操作:“#{pageBean.formatAccount(account)}”,其中 account 是非常复杂的类。我知道根据文档,这是不可能的,但确实如此。我应该害怕将来会遇到一些困难吗?这就是问题所在。

最佳答案

这意味着那里有“非标准”对象。 IE。不是 StringInteger 等,而是像 Javabean 等完全有值(value)的值对象。

<小时/>

更新:我现在明白文档的含义了。这意味着这些值实际上并不是作为复杂对象传递的,而是作为表示值表达式的普通字符串传递的。从字面上看,"bean.hotel""bean.user.address" 等。提交页面时,这些字符串将被评估为值表达式以及关联的复杂对象将从 JSF 内存中检索它。

这里的重要性在于,您需要在表单提交的后续请求中保留相同的复杂对象,就像在表单的初始显示中一样。如果 bean 是请求范围的,那么当响应完成时原始对象就会丢失。您希望在后续请求期间在 bean 的构造函数中再次构造完全相同的复杂对象。解决此“问题”的另一种方法是将 bean 置于更广泛的范围内,例如 session 范围或 Seam 对话范围或 JSF 2.0 View 范围。

这也是文档的下一句话试图说明的内容:

You must ensure that the parameters are available not only when the page is rendered, but also when it is submitted. If the arguments can not be resolved when the page is submitted the action method will be called with null arguments!

关于java - 是否可以通过 JBoss EL 解析器在 EL 中使用对象作为函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2682196/

相关文章:

java - 如何在 Swing 中为 JTable 提供分页支持?

java - 对 transient 集合字段的 Hibernate 注释

xml - 在 JSF 中显示 XML

java - 由 WebFilter URL 模式引起的 glassfish 部署错误

apache - WildFly -> Undertow -> 将子域映射到 war 文件不起作用

java - Box2D 远离行星旋转

java swt jface TreeViewer 从节点扩展

java - 如何在 JSF 中动态添加字段?

java - JBoss 安全问题

java - JBOSS EAP6.4 中的 NoClassDefFoundError