jsp1.jsp
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
<%@ taglib uri="/WEB-INF/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ page contentType="text/html; charset=GBK" %>
<%@ page errorPage="jsp1_error.jsp" %>
<html:html>
<head>
<title>
jsp1
</title>
</head>
<body bgcolor="#ffffff">
<h1>
JBuilder Generated JSP
</h1>
<html:form action="untitled1Action.do">
<br><br>
  name : <html:text property="name"/><html:errors property="name"/><br/>
  
  <html:select property="testSelect">
    <html:optionsCollection property="list" label="test" value="id"/>
  </html:select>
<html:submit/><html:cancel/></html:form>
</body>
</html:html>Untitled1Action.java
package testlist2;import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.Action;public class Untitled1Action extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response) {
        Untitled1ActionForm untitled1ActionForm = (Untitled1ActionForm) form;
        return null;
    }
}Untitled1ActionForm.java
package testlist2;import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;public class Untitled1ActionForm extends ActionForm {
    private String name;
    private String testSelect;
    
    test u = new test();    private ArrayList list = u.getTests();    public ArrayList getList() {
            return list;
    }    public void setList(ArrayList list) {
        this.list = list;
    }
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }    public void setTestSelect(String testSelect) {
        this.testSelect = testSelect;
    }    public String getTestSelect() {
        return testSelect;
    }    public ActionErrors validate(ActionMapping actionMapping,
                                 HttpServletRequest httpServletRequest) {
            /** @todo: finish this method, this is just the skeleton.*/
        return null;
    }    public void reset(ActionMapping actionMapping,
                      HttpServletRequest servletRequest) {
    }
}test.java
package testlist2;import java.io.Serializable;
import java.util.ArrayList;public class test implements Serializable {
      
    private ArrayList mylist=new ArrayList();    public ArrayList getTests()
    {
        ArrayList list = null;
        list=mylist;
        return list;
    }
    public test() {
        mylist.add("asdfasf");
    }
}报错信息是:
javax.servlet.jsp.JspException: No getter method available for property test for bean under name asdfasf
 at org.apache.struts.taglib.html.OptionsCollectionTag.doStartTag(OptionsCollectionTag.java:214)
 at org.apache.jsp.jsp1_jsp._jspx_meth_html_optionsCollection_0(org.apache.jsp.jsp1_jsp:263)
 at org.apache.jsp.jsp1_jsp._jspx_meth_html_select_0(org.apache.jsp.jsp1_jsp:235)
 at org.apache.jsp.jsp1_jsp._jspx_meth_html_form_0(org.apache.jsp.jsp1_jsp:163)
 at org.apache.jsp.jsp1_jsp._jspx_meth_html_html_0(org.apache.jsp.jsp1_jsp:126)
 at org.apache.jsp.jsp1_jsp._jspService(org.apache.jsp.jsp1_jsp:89)
 ……请高手帮一下忙,100分奉送

解决方案 »

  1.   

    错误出现在这一行:<html:optionsCollection property="list" label="test" value="id"/>
    property="list" 会导致到untitled1ActionForm里面去找名为"list"这个属性。
    根据你的代码,它找到了list,然后开始迭代,你在list中放入了一个元素是字符串"asdfasf"。
    然后进行到label="test" value="id" 这两句会到list的当前元素(被当成是bean)里面去找这属性test和属性id
    而你的list中的元素仅仅是一个字符串,肯定找不到属性test,也就会出现
    No getter method available for property test for bean under name asdfasf 这样的错误。你要想实现你的效果,你应该写一个bean,里面含有test和id属性以及它们的setter和getter,然后把这样的一些对象加到list中去就行了。
      

  2.   

    我想实现的只是 把我的list里面的字符串填充到 select里面,我该如何做呢?
      

  3.   

    我现在把 test.java 就作为我的bean....代码如下:
    我该怎么填写list里面的内容呢?test.java
    package testlist2;import java.io.Serializable;
    import java.util.ArrayList;public class test implements Serializable {
        // Fields     private Integer id;
         private String test;    private ArrayList mylist=new ArrayList();    public ArrayList getTests()
        {
            ArrayList list = null;
            list=mylist;
            return list;
        }
        public test() {
            mylist.add("testlist2.test");
        }    /** full constructor */
        public test(String test) {
            this.test = test;
        }
        // Property accessors    public Integer getId() {
            return this.id;
        }    public void setId(Integer id) {
            this.id = id;
        }    public String getTest() {
            return this.test;
        }    public void setTest(String test) {
            this.test = test;
        }
    }
      

  4.   

    那很容易,不要用html:optionsCollection标签,直接用
    <html:options property="list">就行了。
      

  5.   

    你的test类主要的作用我看似乎是用来产生list的,而你要设计的bean应该是list中的一个元素,因此你把它们放到一个类里面,你的逻辑岂不是很混乱?
    另写一个bean如下:
    package testlist2;public class TestBean
    {
      private String test;
      private String id;
      public String getTest()
      {
        return test;
      }
      public void setTest(String test)
      {
        this.test = test;
      }
      public String getId()
      {
        return id;
      }
      public void setId(String id)
      {
        this.id = id;
      }
      
    }test类做如下修改:
    package test2;
    import java.io.Serializable;
    import java.util.ArrayList;public class test implements Serializable {
          
        private ArrayList mylist=new ArrayList();    public ArrayList getTests()
        {
            ArrayList list = null;
            list=mylist;
            return list;
        }    private TestBean bean = new TestBean();
        
        public test() {
            bean.setTest("asdfasf");
            bean.setId("1");
            mylist.add(bean);
        }
        
    }
      

  6.   

    一般来说,list中的集合会来自于数据库查询,你在迭代结果集的时候把信息set到你的bean里面即可。