2013-02-01 30 views
2

找不到验证程序属性中使用的El函数,该验证程序属性取决于动态值或重复值?在验证程序属性中找不到EL函数

Function 'el:min' not found 
#{el:min(a + b, c)} 
<f:validateLongRange maximum="#{el:min(foo.bar, 10)}"/> 

刚印刷出来的值是工作的地方不是在验证工作。

回答

1

错误消息Function 'el:min' not found是如此误导。 问题是从来没有的结构,但它是在嵌套属性的基本NullPointerException

由于在一种情况下该值被根据一个不同的组件选择它是通过AJAX更新,默认值是空值。由于默认值为空,所以引发了这种误导性的异常。

值是一个嵌套的属性,因此它不是EL函数内逮住

解决方案:禁用默认

<o:validator validatorId="javax.faces.LongRange" maximum="#{el:min(foo.bar, 10)}" 
    disabled="#{foo eq null}"/> 
2

这种结构应该只是罚款。问题是最有可能你已经有变量的范围和时间(即,当你需要他们?是他们改变了“幕后”的时候?)。

你要明白,taghandlers像在视图生成时(like JSTL <c:xxx><f:xxx>运行。所以他们的属性在视图构建时被解决,并且会被bean的默认值所填充。也许你对他们进行一些业务逻辑,同时提交表单,并希望他们将反映到taghandler属性。但是这是错误的。它们在视图构建时已经被评估过,并且在处理表单提交期间不会重新评估这些值。

如果事实确实如此,那么你已经基本上这已经是概述,并在此答案的各种可能的解决方案回答了同样的问题:How to set converter properties for each row of a datatable?除了形式homegrowing此一Validator,您可以使用OmniFaces<o:validator>此:

<o:validator validatorId="javax.faces.LongRange" maximum="#{el:min(a + b, c)}" /> 
+0

总是同样的问题,查看验证和制作时间。为什么这些组件被设计为在构建期间运行,这一定是一个很大的性能问题。这并没有解决这个问题,但对我来说仍然是一个问题。你的答案肯定节省了时间或一个新的问题,并导致我找到的解决方案^^ – djmj