2

オプションを正しく表示する次のドロップダウンリストがありますが、アイテムを選択してフォームを送信すると、次のエラーが発生します。

'select', field 'list', name 'name': The requested list key 'listnames' could not be 
 resolved as a collection/array/map/enumeration/iterator type. Example: people or 
 people.{name} - [unknown location]

私のJSPフォーム

      <s:form method="POST" action="addNames">
            <s:select name="name"
                      label="Names"
                      list="listnames"
                      />
     </s:form>

私の行動

 @Action
 public class Myaction implements ModelDriven{
    private MyClass myclass = new MyClass();
    private List listnames = new ArrayList();

   @Override
   public MyClass getModel() {
      return this.myclass;
   }

  public List getListnames() {
     return listnames;
  }

  public void setListnames(List listnames) {
     this.listnames = listnames;
 } 


   public MyClass getMyClass() {
       return myclass;
 }

   public void setMyClass(MyClass myclass) {
       this.myClass = myclass;
   }
 }

私のクラス

 public class MyClass {
   private String name;

   ..... getter and setters go here ....
 }

ストラット

<package name="MyUsers" extends="default" namespace="/MyUsers">
        <action name="*" method="{1}" class="com.myproject.controller.Myaction">
            <result name="uAdd" type="tiles" >uAdd</result>
            <result name="uView" type="tiles" >uView</result>
        </action>
    </package>
4

3 に答える 3

2

STEP 1 : getter と setterlistnamesが適切に行われていることを確認してください

STEP 2listnames : List の宣言と初期化が適切に行われたことを確認してください

更新 2 サンプル例

struts.xml

<action name="getText" class="commonpackage.ReportsCommonClass" method="getText">
<result name="success">index.jsp</result>
</action>

<action name="myaction" class="commonpackage.ReportsCommonClass" method="myaction">
<result name="success">index2.jsp</result>
</action>

index.jsp

 <s:form id="conform" action="myaction" method="post">
 <label>NAME</label>
     <s:select id="name1" name="name1" list="mylist" headerKey="0" headerValue="--SELECT--"/>              

<s:submit value="Click" />  
 </s:form>

commonpackage.ReportsCommonClass クラス内

ArrayList mylist=new ArrayList();

    public ArrayList getMylist() {
        return mylist;
    }

    public void setMylist(ArrayList mylist) {
        this.mylist = mylist;
    }

  public String getText()
  {
      mylist.add("NAME 1");
       mylist.add("NAME 2");
        mylist.add("NAME 3");
         mylist.add("NAME 4");
          mylist.add("NAME 5");
       return SUCCESS;
  }
  String name1;

    public String getName1() {
        return name1;
    }

    public void setName1(String name1) {
        this.name1 = name1;
    }


  public String myaction()
  {
       System.out.println("NAMEEEEEEEEEEEEEEEEEEEEE:"+name1);
       return SUCCESS;
  }
于 2013-03-01T04:55:29.933 に答える
1

アクション クラスの name にゲッター セッターを提供します。フォームを送信するときの選択タグ名は名前<s:select name="name">であるため、アクションクラスでプロパティ名が検索されます。これはあなたの場合の問題かもしれません

于 2013-03-01T04:55:29.153 に答える
1

このように選択タグを変更します

 <s:form method="POST" action="addNames">
            <s:select name="myclass.name"
                      label="Names"
                      list="listnames"
                      />
     </s:form>

編集:

問題: jsp を直接ヒットしていると思われるため、アクションの実行はありません。アクションの実行がない場合、リクエストにリストはありません。

解決。 JSP またはビューをレンダリングする前に、アクション クラスが実行され、リストが初期化または設定される方法で URL をヒットします。

JSPを直接実行するのではなく、アクションクラスにpopulateViewのようなメソッドを作成し、このメソッドを実行します。

私の言いたいことを理解していただければ幸いです。

于 2013-03-01T04:57:39.947 に答える