2012-05-22 13 views
13

Ich möchte ein Array in JSF EL erstellen. Wie kann ich das machen? Ist es überhaupt möglich?Wie erstelle ich ein Array in JSF EL?

Um zu zeigen, was ich versuche:

<rich:pickList addAllText="" addText="" removeAllText="" removeText=""> 
    <f:selectItems value="#{'Test', 'TestTest', 'TestTestTest'}" /> 
</rich:pickList> 

Antwort

18

Wenn Sie auf EL 3.0 oder höher sind, können Sie construct collections directly in EL.

<f:selectItems value="#{['Test','TestTest','TestTestTest']}" /> 

Wenn Sie 3.0 noch nicht auf EL sind, könnten Sie diesen besonderen Fall mit einem fn:split() Trick lösen.

<html ... xmlns:fn="http://java.sun.com/jsp/jstl/functions"> 
... 
<f:selectItems value="#{fn:split('Test,TestTest,TestTestTest', ',')}" /> 

So oder so, erfordert dies ein Minimum an JSF 2.0 für die Unterstützung von List<T> in <f:selectItems>.

+3

Oder, wenn mit JSF 2, fügen Omnifaces das Projekt und Nutzung 'von: createArray' :) – elias

+0

Großer, das funktioniert, obwohl ich' musste verwenden xmlns: fn = "http: // java.sun.com/jsp/jstl/functions" anstelle von "http: // java.sun.com/jsp/jstl/core". – Sandro

+0

Gern geschehen. Ich habe das behoben Tippfehler. – BalusC

4

Es ist möglich, mit EL 3.0:

[1, 2, 3].toArray() 

Dies erzeugt eine Liste zuerst, und wandelt sie dann in ein Array.

Zumindest mit den letzten JSF-Versionen brauchen Sie nicht einmal ein Array für f:selectItems, jeder Iterable wird tun. Also:

<f:selectItems value="#{['Test', 'TestTest', 'TestTestTest']}" /> 

Weitere Informationen zur Sammlung Bau in EL siehe EL 3.0 Specification - final release, 2.2 Konstruktion von Sammlungsobjekten.

0

Ich verwende ArrayUtils von Apache, um dies zu tun. Registrieren Sie zuerst die ArrayUtils-Klasse als Bean, damit Sie über EL darauf zugreifen können.

<managed-bean> 
    <managed-bean-name>arrayUtils</managed-bean-name> 
    <managed-bean-class>org.apache.commons.lang3.ArrayUtils</managed-bean-class> 
    <managed-bean-scope>application</managed-bean-scope> 
</managed-bean> 

dann können Sie ArrayUtils' Methoden aufrufen:

#{myBean.aMethod(arrayUtils.add(ArrayUtils.EMPTY_INT_ARRAY, 1))} 

der obige Code wird nicht funktionieren, wenn Sie nicht die Konstante EMPTY_INT_ARRAY zugreifen können. Um dies zu erreichen, habe ich Primfaktoren p: importConstants Komponente, nicht sicher, ob in JSF einfach gemacht werden kann.

dies ist, wie ich es verwenden:

<p:importConstants type="org.apache.commons.lang3.ArrayUtils" var="ArrayUtils" /> 
Verwandte Themen