как получить доступ к переменной EL и передать ее в качестве аргумента функции в EL? - PullRequest
2 голосов
/ 25 декабря 2009

Я хочу вызвать функцию в бине с аргументом, переданным ему в jsp, используя EL. Проблема в том, что он не позволяет что-то вроде: "${teacherBean.certificationFor(${particularField})"

Дело в том, что я хочу перебрать массив и вызвать функциюtificationFor для всех значений в массиве, переданных в качестве аргумента. Я получаю значения в массиве по:

Итак, в основном я хочу сделать что-то вроде: $ {TeacherBean.certificationFor ($ {particularField}) но я не могу этого сделать. Могу ли я сделать это любым другим способом?

Я новичок в EL. :) Любая помощь приветствуется.

Ответы [ 4 ]

4 голосов
/ 25 декабря 2009

Где именно вы хотите это сделать и для чего? Просто чтобы получить значение для отображения? По крайней мере, в стандартном EL до Java EE 6 вы не можете передавать подобные аргументы метода. В JBoss-EL или в Java EE 6 EL вы можете сделать это. Синтаксис тогда был бы просто:

${teacherBean.certificationFor(particularField)}

Обратите внимание, что вы не можете вкладывать выражения EL, выражение EL уже является целым выражением.

В стандартных реализациях EL, однако, вы можете получить доступ к значениям Map с помощью клавиш в скобках. Таким образом, если, например, у вас есть Map<String, String> certifications, где ключи соответствуют particularField и значениям, связанным с ними значение:

private Map<String, String> certifications = new HashMap<String, String>();

public Map<String, String> getCertificationFor() {
    return this.certifications;
}

, тогда вы можете использовать следующие обозначения:

${teacherBean.certificationFor[particularField]}

это разрешается за кадром до

teacherBean.getCertificationFor().get(particularField)
1 голос
/ 25 декабря 2009

Я думаю, что в стандартном EL у вас нет других опций, кроме определения ваших функций, заключенных в функцию EL;

Чтение: http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPIntro7.html в нижней части документ;

но, как уже упоминалось в BalusC, если бы вы могли использовать другую реализацию EL, если у вас есть возможность добавить такую ​​зависимость в ваше приложение

0 голосов
/ 14 июля 2010

Если вы обращаетесь к общей функциональности, которая лучше выражена в виде отдельной функции, то вы можете написать ее следующим образом:

${certificationFor[teacherBean][particularField]}

, где CertificationFor отображается в класс CertificationFor, который расширяет класс ELMethod.java Вы реализуете функциональность в методе result(Object[] args). Аргументы этого метода - это аргументы, которые вы передали объекту ${certificationFor} в EL.

public class CertificationFor extends ELMethod {
  public Object result(Object[] args) {  
    TeacherBean teacherBean = (TeacherBean) args[0];  
    String property = (String) args[1];

    // your implementation goes here
    return ....;
  }
}  

Хитрость заключается в том, чтобы использовать ваш объект как цепочку карт, то есть один из способов передачи нескольких аргументов в функцию EL.

Если вы заинтересованы, вы можете увидеть полный код и фрагменты кода здесь: http://www.vineetmanohar.com/2010/07/how-to-pass-parameters-in-el-methods/

0 голосов
/ 25 декабря 2009

А как же:

${teacherBean.certificationFor(particularField)}
...