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>

アプリケーションを実行していると、次のようなエラーが発生します

SEVERE: サーブレット [jsp] の Servlet.service() がパス [/PTMS] のコンテキストで例外をスローしました [tag 'select', field 'list', name 'pname': 要求されたリスト キー 'projectlist' を次のように解決できませんでしたコレクション/配列/マップ/列挙型/イテレータ型。例: people または people.{name} - [unknown location]] 根本原因タグ 'select'、フィールド 'list'、名前 'pname': 要求されたリスト キー 'projectlist' を collection/array/ として解決できませんでしたマップ/列挙型/イテレータ型。例: people または people.{name} - [不明な場所]

このエラーを解決するにはどうすればよいですか?

4

1 に答える 1

0

2 つの問題があります。

  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"));
}

また、実際にはこのメソッドを呼び出していないように見えますが、コードはインデントや貴重な空白がないと本質的に判読できないため、見分けるのは困難です。あなたがそれをどこと呼ぶかは、議論の余地があります。ゲッター自体、prepare()メソッド(およびアクションimplement Prepareable)、execute()メソッドなどに含まれる可能性があります。

ただし、これらの種類のものは、テスト容易性の補助としてサービスに組み込まれる可能性があります。

2) JSP への最初のアクセスが正しく処理されているとは思えません。そうすべき:

a) Struts 2 アクションを実行します
。b)projectlistイニシャライザを呼び出します
。c) フォームを使用して JSP に転送します。

これらの基準がすべて満たされている場合、そのエラーは発生しません。

于 2013-02-26T20:07:28.873 に答える