如何通过EL表达式语言基于其他变量的值查找变量的值

时间:2012-04-26 23:18:48

标签: jsp jstl

假设我有两个请求属性:

  1. “fieldnames”,这是一个字段名称列表。例如:[“fielda”,“fieldb”]
  2. “field.fielda”,其中包含一段html。例如:输入字段或类似的东西
  3. 在我的JSP页面中,我有以下内容:

    <c:forEach var="field" value="${fieldnames}">
      <c:set var="tmp" value="field.${field}"/>
      ${request.getAttribute(tmp)}
    </c:forEach>
    

    现在问题是,我可以通过列表看到该字段的名称。我可以在temp变量中生成“正确的”字段名称。但我无法弄清楚如何从请求属性映射中获取引用属性的值。可以这样做吗?我尝试过使用请求[变量]表示法也无济于事。

1 个答案:

答案 0 :(得分:0)

假设你有一个像:

这样的bean
public class MyBean {
   private String fielda;
   private String fieldb;

   public String getFielda() {
      return fielda;
   }
   public void setFielda(String fielda) {
      this.fielda = fielda;
   }
   public String getFieldb() {
      return fieldb;
   }
   public void setFieldb(String fieldb) {
      this.fieldb = fieldb;
   }
}

代码在某处:

MyBean field = new MyBean();
field.setFielda("Message from A");
field.setFieldb("Message from B");
request.setAttribute("field", field);

request.setAttribute("fieldnames", new String[] { 
   "fielda", "fieldb" 
});

然后这样的事情应该有效:

<c:forEach var="fn" items="${fieldnames}">
   ${requestScope.field[fn]}
</c:forEach> 

如果失败,或者您的代码比这更复杂,您可以在a custom taga custom function中提取逻辑以执行EL evaluation。如果这种情况的开销太大,那么也许你可以重新考虑你的代码并找到另一种方法来获得相同的结果。