选择框中出错

时间:2013-02-26 18:42:49

标签: struts2

这是我的Assignemployee.jsp文件代码

<s:form action="AssignEmployee" name="myForm">
<s:select name="pname" list="projectlist"  headerKey="0" label="Select a country" />
 <s:submit/>
 </s:form>

这是我的projectlist.java操作文件

package myPack;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;
public class projectlist extends ActionSupport implements ServletRequestAware { 
private static final long serialVersionUID = 1L;
HttpServletRequest request;
private List<String> projectlist;
public List<String> getProjectlist() {
return projectlist;
}
public void setProjectlist(List<String> projectlist) {
this.projectlist = projectlist;
}
public void setServletRequest(HttpServletRequest request)
{
this.request = request;
} 
public HttpServletRequest getServletRequest(){
return request;
}
public String getDefaultSearchEngine() {
return "yahoo.com";
}
public projectlist()
{       
try
{
Class.forName("com.mysql.jdbc.Driver"); 
java.sql.Connection con=DriverManager.getConnection("jdbc:mysql:///pmt","root","shree");    
ps=con.prepareStatement("select * from addproject");
ResultSet res = ps.executeQuery();      
while(res.next()) 
{   
projectlist = new ArrayList<String>();
projectlist.add(res.getString("pname"));
}
ps.close();         
con.close();
} 
catch(Exception e)
{ 
e.printStackTrace(); 
}
}
public String execute()throws Exception
{
return SUCCESS;
}
public String display() {
return NONE;
}
}

这是struts.xml

<action name="AssignEmployee" class="myPack.projectlist" method="display">
    <result name="success">assignemployee.jsp</result>
</action>

当我运行应用程序时,我收到类似

的错误
  

SEVERE:Servlet [jsp]的Servlet.service()在路径[/ PTMS]的上下文中抛出异常[tag'select',字段'list',名称'pname':请求的列表键'projectlist'不能被解析为集合/数组/映射/枚举/迭代器类型。示例:具有根本原因的人员或人员。{name} - [unknown location]]   标记'select',字段'list',名称'pname':请求的列表键'projectlist'无法解析为collection / array / map / enumeration / iterator类型。例如:人或人。{name} - [unknown location]

如何解决此错误?

1 个答案:

答案 0 :(得分:0)

有两个问题:

  1. 项目列表创建已中断,
  2. 第一次访问表单已被破坏。
  3. 1)您正在为结果集中的每一行创建一个新列表:

    while (res.next()) {   
        projectlist = new ArrayList<String>();
        projectlist.add(res.getString("pname"));
    }
    

    这应该更贴近:

    projectlist = new ArrayList<String>();
    while (res.next()) {   
        projectlist.add(res.getString("pname"));
    }
    

    你似乎也从未真正调用这种方法,虽然很难分辨,因为代码在没有缩进或任何有价值的空格的情况下基本上是难以理解的。你称之为的地方对某些辩论持开放态度;它可以在getter本身,prepare()方法(动作将implement Prepareable),execute()方法等。

    然而,作为一种可测试性辅助工具,这些东西应该可以用于服务。

    2)我不相信您正在正确处理对JSP的初始访问。它应该:

    a)完成Struts 2动作,
    b)调用projectlist初始值设定项,然后选择 c)使用表单转发到JSP。

    如果符合所有这些条件,您将不会收到该错误。