primefaces java_Primefaces outputLabel用于复合组件

不幸的是,这是"by design" . #{} 表达式的评估被推迟到访问时间的确切时刻 . 它们与JSP中的"standard" EL ${} 不同,它们在标记处理程序和"cached"解析的确切时刻进行评估,以便在同一请求/视图期间进行访问 . 在渲染 的那一刻,因此 UIInput#isRequired() 引用的 #{cc.attrs.required} 需要被评估,在EL上下文中没有任何 #{cc} 的方法 . 所以它的任何属性都不会评估任何东西 . 只有当你坐在 内时, #{cc} 才能在EL上下文中使用,因此它的所有属性都会成功评估 .

从技术上讲,这是 设计中一个不幸的角落案件疏忽 . 标准JSF和EL表现为指定的行为 . 基本上,标签's asterisk depending on the input' s required 属性的呈现应该以相反的方式进行评估:此时复合内部的 将被呈现,或者甚至已经在需要时,但是输入组件应该以某种方式通知标签它所需的组件 . 这反过来又变得艰难而且笨拙(因而效率低下) .

如果将标签移动到复合材料内部不是一个选项,那么最好的办法是在输入组件周围创建一个标签文件而不是复合组件 . 它只需要一些额外的XML样板 .

/WEB-INF/tags/input.xhtml :

xmlns="http://www.w3.org/1999/xhtml"

xmlns:ui="http://java.sun.com/jsf/facelets"

xmlns:c="http://java.sun.com/jsp/jstl/core"

xmlns:p="http://primefaces.org/ui"

>

/WEB-INF/my.taglib.xml :

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"

version="2.0"

>

http://example.com/my

input

tags/input.xhtml

/WEB-INF/web.xml :

javax.faces.FACELETS_LIBRARIES

/WEB-INF/my.taglib.xml

用法:

...

我只是做了一个快速测试,它对我来说很好 .

另见:

When to useui:include, tag files, composite components and/or custom components?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值