2011-01-26 6 views
0

En action J'ai re réglé les paramètres envoyés.Comment accéder aux attributs dynamiques dans JSP (Struts2)

for(Enumeration<String> enumParams = request.getParameterNames(); enumParams.hasMoreElements();) { 
     String name = enumParams.nextElement(); 
     String value = request.getParameter(name); 
     request.setAttribute(name, value); 
    } 

Sur la page JSP, je souhaite accéder aux valeurs d'attribut de requête.

<s:iterator value="variables"> 
    <input type="text" 
     id="<s:property value="sign"/>" 
     name="<s:property value="sign"/>" 
     value="<s:property value="%{#attr['sign']}"/>" /> 
</s:iterator> 

(les variables sont des objets avec le signe de champ, etc.)

Actuellement je reçois avec <s:property value="%{#attr['sign']}"/> seulement le signe de la variable, et non la valeur. Il n'évalue pas 'sign'.

HTML généré:

<input id="A" name="A" value="A" type="text"> 

Donc, si signe dur code comme ceci <s:property value="%{#attr['A']}"/>, je reçois la valeur correcte ...

Des indices? S'il vous plaît.

+1

Je n'ai pas regardé cela de près, mais simplement remarquer ces choses que les gens du voyage: 1) « A » est pas une chaîne mais un personnage OGNL , si OGNL obtient plus d'un caractère entre guillemets simples, il produira une chaîne mais un seul caractère doit utiliser "caractères" 2) Les paramètres de requête ne sont pas de type Map mais de Map 3 Une balise s: iterator peut fonctionner avec n'importe quel Iterable, donc elle peut directement travailler avec la carte #request, cela devrait être capable de supprimer le code d'action (je pense qu'il vaut mieux avoir du code dans l'action que dans la vue – Quaternion

+0

Merci pour # 1. Par # 2 nous sommes caref ul (j'espère assez :)). Pour # 3 - oui c'est possible, mais ici je suis en train d'itérer à travers des objets de valeurs spécifiques, et si j'irais et itérerais aussi à travers ma requête, j'aurais O (n^2). – Trick

Répondre

3

Je l'ai avec une petite astuce:

<s:iterator value="variables"> 
    <s:set var="mySign" value="%{sign}" name="mySign" scope="request"></s:set> 
    <jsp:useBean id="mySign" class="java.lang.String" scope="request" ></jsp:useBean>   
    <input type="text" 
     id="<s:property value="sign"/>" 
     name="<s:property value="sign"/>" 
     value="<%=request.getAttribute(mySign)%>"> 
</s:iterator> 
Questions connexes