Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Checking for string length in Expression language

Tags:

jsp

jsf

el

jsf-2

I am using JSF and want to have a component that should be rendered only when the value of a String in the associated managed bean is greater than zero. I am doing this :

rendered="#{tabbedToolbarBean.editor.selectedQuery.length() gt 0}"

Additionally the signature of getter for selectedQuery is public String getSelectedQuery(){}. I get the following error with the latest version of weblogic server.

Error: Function length has an invalid prefix or uses the default namespace which is not defined. Correct the prefix or in a jsp document, put the function inside a tag that defines the tag library namespace

What am I missing?Not getting much help after googling.

like image 364
Inquisitive Avatar asked Mar 29 '13 13:03

Inquisitive


1 Answers

This means that your environment doesn't support the new EL 2.2 feature of invoking non-getter methods with parentheses.

Your best bet is using JSTL's fn:length() instead.

<html ... xmlns:fn="http://java.sun.com/jsp/jstl/functions">
...
rendered="#{fn:length(tabbedToolbarBean.editor.selectedQuery) gt 0}"

Alternatively, just use empty keyword in EL. The difference is that it also checks nullness.

rendered="#{not empty tabbedToolbarBean.editor.selectedQuery}"

See also:

  • org.apache.jasper.JasperException: The function test must be used with a prefix when a default namespace is not specified
like image 197
BalusC Avatar answered Oct 03 '22 09:10

BalusC