0

这是我的 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>

当我运行应用程序时,我收到一个错误,例如

严重:servlet [jsp] 的 Servlet.service() 在路径 [/PTMS] 的上下文中抛出异常 [tag 'select', field 'list', name 'pname': 请求的列表键 'projectlist' 无法解析为集合/数组/映射/枚举/迭代器类型。示例:people 或 people.{name} - [unknown location]] 带有根本原因标签“select”、字段“list”、名称“pname”:请求的列表键“projectlist”无法解析为集合/数组/映射/枚举/迭代器类型。示例:人或人。{name} - [未知位置]

如何解决这个错误?

4

1 回答 1

0

有两个问题:

  1. 项目列表创建被破坏,并且
  2. 对表单的第一次访问被破坏。

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。

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

于 2013-02-26T20:07:28.873 回答