1

2つのリクエスト属性が来るとしましょう:

  1. フィールド名のリストである「fieldnames」。例:["fielda"、 "fieldb"]
  2. htmlのスニペットを含む「field.fielda」。例:入力フィールドなど

私のJSPページには、次のようなものがあります。

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

問題は、リストからフィールドの名前を確認できることです。一時変数で「適切な」フィールド名を生成できます。しかし、リクエスト属性マップから参照された属性の値を取得する方法がわかりません。これはできますか?request[variable]表記も使用してみましたが無駄になりました。

4

1 に答える 1

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> 

それが失敗した場合、またはコードがそれよりも複雑な場合は、カスタム タグまたはカスタム関数のロジックを引き出して EL 評価を行うことができます。それが状況に対してオーバーヘッドが大きすぎる場合は、コードを再考して、同じ結果を得るための別の方法を見つけることができます。

于 2012-04-29T13:44:07.227 に答える