How to display value of List#size() in JSF EL?

爱⌒轻易说出口 提交于 2019-12-29 05:43:05

问题


I'd like to know if there's a way to bind the returned value of a method into a JSF component. I'll explain myself better. Let's say I have a class like this:

public class Document {
   private List<Attachment> attachments;
   //getter and setter here
}

this class is exposed to jsf through a registered managed bean in a property called currentDocument, and used in a jsf this way

<h:outputText value="#{myManagedBean.currentDocument.attachment.size}" />

This isn't correct, I know. But what is the correct way to do this? Am I supposed to create an attribute on the Document class, let's say numberOfAttachments, and bind to that, or there's a way to bind directly on a method's return value?


回答1:


If you're running an EL 2.2 capable container (Tomcat 7, Glassfish 3, JBoss AS 6 or newer, all implementing Servlet 3.0), or are using JBoss EL, then you should be able to invoke non-getter methods by EL:

<h:outputText value="#{myManagedBean.currentDocument.attachment.size()}" />

An alternative is to use JSTL fn:length():

<html xmlns:fn="http://java.sun.com/jsp/jstl/functions" ...>
...
<h:outputText value="#{fn:length(myManagedBean.currentDocument.attachment)}" />

If none of that is possible for you for some reason, then your best bet is to create an EL function yourself

<h:outputText value="#{my:size(myManagedBean.currentDocument.attachment)}" />

or to add an extra getter method to #{myManagedBean} which returns exactly that.

<h:outputText value="#{myManagedBean.currentDocumentAttachmentSize}" />

See also:

  • Invoke direct methods or methods with arguments / variables / parameters in EL


来源:https://stackoverflow.com/questions/7120526/how-to-display-value-of-listsize-in-jsf-el

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!