How do you get the length of a list in the JSF expression language?

后端 未结 7 1560
忘掉有多难
忘掉有多难 2020-12-13 03:04

How would I get the length of an ArrayList using a JSF EL expression?

#{MyBean.somelist.length}

does not work.

7条回答
  •  無奈伤痛
    2020-12-13 03:55

    Note: This solution is better for older versions of JSTL. For versions greater then 1.1 I recommend using fn:length(MyBean.somelist) as suggested by Bill James.


    This article has some more detailed information, including another possible solution;

    The problem is that we are trying to invoke the list's size method (which is a valid LinkedList method), but it's not a JavaBeans-compliant getter method, so the expression list.size-1 cannot be evaluated.

    There are two ways to address this dilemma. First, you can use the RT Core library, like this:

    
    

    Second, if you want to avoid Java code in your JSP pages, you can implement a simple wrapper class that contains a list and provides access to the list's size property with a JavaBeans-compliant getter method. That bean is listed in Listing 2.25.

    The problem with c_rt method is that you need to get the variable from request manually, because it doesn't recognize it otherwise. At this point you are putting in a lot of code for what should be built in functionality. This is a GIANT flaw in the EL.

    I ended up using the "wrapper" method, here is the class for it;

    public class CollectionWrapper {
    
        Collection collection;
    
        public CollectionWrapper(Collection collection) {
            this.collection = collection;
        }
    
        public Collection getCollection() {
            return collection;
        }
    
        public int getSize() {
            return collection.size();
        }
    }
    

    A third option that no one has mentioned yet is to put your list size into the model (assuming you are using MVC) as a separate attribute. So in your model you would have "someList" and then "someListSize". That may be simplest way to solve this issue.

提交回复
热议问题