在validator属性中找不到El函数,这取决于动态值或重复值?
Function 'el:min' not found
#{el:min(a + b, c)}
<f:validateLongRange maximum="#{el:min(foo.bar, 10)}"/>
只是打印出值,它在验证器中不起作用的地方工作。
答案 0 :(得分:2)
这个结构应该可以正常工作。问题很可能是你在那里的变量的范围和时间(即你什么时候需要它们?什么时候他们“在幕后”改变?)。
您需要了解像<f:xxx>
这样的标记处理程序在视图构建时(like JSTL <c:xxx>
)运行。因此,它们的属性在视图构建期间得到解决,并且将填充bean的默认值。也许您在提交表单时会对它们执行一些业务逻辑,并期望它们会反映到taghandler属性中。但是这是错误的。它们已在视图构建期间进行了评估,并且在处理表单提交期间不会重新评估值。
如果情况确实如此,那么基本上你已经概述了同样的问题,并在这个答案中用各种可能的解决方案回答:How to set converter properties for each row of a datatable?除了为此增加一个Validator
,你可以使用OmniFaces <o:validator>
:
<o:validator validatorId="javax.faces.LongRange" maximum="#{el:min(a + b, c)}" />
答案 1 :(得分:2)
错误消息Function 'el:min' not found
如此误导。
问题从来不是构造,但它是嵌套属性的基础NullPointerException
。
由于在一种情况下,该值取决于不同的组件选择,因此它通过ajax更新,默认值为null。由于默认值为null,因此抛出了这种误导性异常。
该值是嵌套属性,因此未在el函数中捕获
解决方案:在默认情况下禁用验证器
<o:validator validatorId="javax.faces.LongRange" maximum="#{el:min(foo.bar, 10)}"
disabled="#{foo eq null}"/>