2009-12-25 12 views
2

Je veux appeler une fonction sur un haricot avec un argument passsed à l'aide en jsp EL. Le problème est qu'il ne permet pas quelque chose comme: « $ {teacherBean.certificationFor ($ {}) particularField »comment accéder à une variable EL et le transmettre comme argument à une fonction EL?

la chose est que je veux itérer sur un tableau et appeler la fonction certificationFor pour toutes les valeurs de la tableau passé en argument. Je reçois les valeurs dans le tableau par:

donc en gros je veux faire quelque chose comme: $ {teacherBean.certificationFor ($ {} particularField) , mais je ne peux pas le faire. puis-je le faire d'une autre manière?

Je suis un débutant dans EL. :) Toute aide est appréciée.

Répondre

0

Qu'en est-:

${teacherBean.certificationFor(particularField)} 
4

Où voulez-exactement voulez-vous faire cela et pour quoi? Juste pour avoir une valeur pour l'affichage? Au moins, en EL standard avant Java EE 6, vous ne pouvez pas passer d'arguments de méthode comme ça. En JBoss-EL ou Java EE 6 EL vous pouvez le faire. La syntaxe serait alors juste été:

${teacherBean.certificationFor(particularField)} 

Notez que vous ne pouvez pas imbriquer expressions EL, une expression EL est déjà une expression tout à lui-même.

Dans les implémentations standards EL vous pouvez cependant accéder Map valeurs par les touches en utilisant la notation accolade. Ainsi, si par exemple vous avez un Map<String, String> certifications où les clés correspond à la particularField et les valeurs de la valeur associée:

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

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

vous pouvez utiliser la notation suivante:

${teacherBean.certificationFor[particularField]} 

cela résout les coulisses de

teacherBean.getCertificationFor().get(particularField) 
1

Je pense que dans le standard EL vous n'avez pas d'autres options que de définir vos fonctions enveloppées dans une fonction EL;

Lire: http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPIntro7.html à la fin du document ;

mais comme BalusC déjà mentionné si vous pouvez utiliser un autre EL implmentation si vous avez la possibilité d'ajouter ce genre de dépendance à votre application

0

Si vous accédez à une fonctionnalité générale qui est mieux exprimée en fonction séparée, alors vous pouvez l'écrire comme suit:

${certificationFor[teacherBean][particularField]} 

où certificationFor cartes à la classe CertificationFor qui s'étend ELMethod.java classe. Vous implémentez la fonctionnalité dans la méthode result(Object[] args). Les args à cette méthode sont les args que vous avez passé à l'objet ${certificationFor} dans 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 ....; 
    } 
} 

L'astuce est d'utiliser votre objet comme une carte chaînée de cartes, qui est une façon de transmettre plusieurs args à la fonction EL.

Si vous êtes intéressé, vous pouvez voir le code complet et des extraits de code ici: http://www.vineetmanohar.com/2010/07/how-to-pass-parameters-in-el-methods/