首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表单不提交<s:select>的选定值。

表单不提交<s:select>的选定值。
EN

Stack Overflow用户
提问于 2013-03-01 04:50:52
回答 3查看 2.3K关注 0票数 2

我有下面的下拉列表,正确地显示了选项,但是当我选择一个项并提交表单时,它会遇到以下错误:

代码语言:javascript
复制
'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表单

代码语言:javascript
复制
      <s:form method="POST" action="addNames">
            <s:select name="name"
                      label="Names"
                      list="listnames"
                      />
     </s:form>

我的行动

代码语言:javascript
复制
 @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;
   }
 }

我的班

代码语言:javascript
复制
 public class MyClass {
   private String name;

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

撑杆

代码语言:javascript
复制
<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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-01 04:57:39

将选择标记更改如下

代码语言:javascript
复制
 <s:form method="POST" action="addNames">
            <s:select name="myclass.name"
                      label="Names"
                      list="listnames"
                      />
     </s:form>

编辑:

问题:,我猜您是直接命中jsp,因此没有任何动作执行。如果没有任何操作执行,那么请求中就没有任何列表。

解决方案。在呈现jsp或视图之前,按下执行动作类的方式,并且列表应该初始化或填充。

在操作类中创建一个类似于populateView的方法,并执行此方法,而不是直接执行JSP。

希望你能理解我想说的话。

票数 1
EN

Stack Overflow用户

发布于 2013-03-01 04:55:29

步骤1:确保正确完成listnames的getter和setter

步骤2:确保正确地完成了listnames列表的声明和初始化

更新2示例示例

struts.xml

代码语言:javascript
复制
<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

代码语言:javascript
复制
 <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>

In commonpackage.ReportsCommonClass class

代码语言:javascript
复制
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;
  }
票数 2
EN

Stack Overflow用户

发布于 2013-03-01 04:55:29

在操作类中为名称提供getter setter。由于选择标记名为<s:select name="name">,所以当您提交表单时,它将在操作类中搜索属性名称。这可能是你的问题所在。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15150706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档