2012-03-21 9 views
2

Struts 2の新機能で、値のリストをドロップダウンボックスに入力できますか?続きStruts2 - 要求されたリストキー 'Products'を解決できませんでした

は私のActionクラス(Portal.java)です:

public class Portal extends ActionSupport { 

    private Map Products; 
    private String product; 

    public Portal(){ 
     Products = new HashMap(); 
     Products.put("1", "Java"); 
     Products.put("2", "C++"); 
    } 

    public Map getProducts() { 
     return Products; 
    } 


    public void setProducts(Map Products) { 
     this.Products = Products; 
    } 

    public String getProduct() { 
    return product; 
    } 

    public void setProduct(String product) { 
    this.product = product; 
    } 

    public String execute() { 
     return SUCCESS; 
    } 
} 

私Portal.jsp、次のとおりです。

私はresult.jspが続き
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="s" uri="/struts-tags"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Portal</title> 
</head> 
<body> 
<h2>Portal</h2> 
<s:form action="result" namespace="/"> 
    <h4> 
     <s:select label="Select Product" 
     name="product" 
     headerKey="-1" 
     headerValue="Select Product"    
     list="Products"              
     /> 
    </h4> 
    <h4> 
     <s:submit label="Submit" name="submitButton" align="center" /> 
    </h4> 
</s:form> 

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="s" uri="/struts-tags"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org 
/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Results Page</title> 
</head> 
<body> 
<h1>Portal</h1> 
<h4> 
    Selected Product : <s:property value="product"/> 
</h4> 
</body> 
</html> 

次は私のstruts.xmlです:後

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
"http://struts.apache.org/dtds/struts-2.0.dtd"> 

<struts> 
    <constant name="struts.enable.DynamicMethodInvocation" value="false" /> 
    <constant name="struts.devMode" value="true" /> 
    <constant name="struts.ognl.allowStaticMethodAccess" value="false" /> 
    <package name="default" extends="struts-default" namespace="/">   
     <action name="result" class="com.abc.xyz.Portal"> 
     <result name="error">Portal.jsp</result> 
     <result name="success">Result.jsp</result>      
     </action>  
    </package> 
</struts> 

は私のweb.xmlです:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee 
/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 

<display-name>Portal</display-name> 
<filter> 
    <filter-name>struts2</filter-name> 
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>struts2</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
<welcome-file-list> 
    <welcome-file>Portal.jsp</welcome-file> 
</welcome-file-list> 
</web-app> 

私はTomcatの6サーバー上でこれを実行すると、私はエラーを以下の取得:

SEVERE: Servlet.service() for servlet jsp threw exception 
tag 'select', field 'list', name 'product': The requested list key 'Products' could 
not be resolved as a collection/array/map/enumeration/iterator type. Example: 
people or people.{name} - [unknown location] 

しかし、list = "Products"をlist = "#{'1': 'Java'、 '2':" C++ '} "に置き換えると、それは完璧にうまくいきます。リストが表示されないようにします。

助けてください。

答えて

3

Javaが... リスト=「製品」大文字と小文字が区別されますが、あなたがリスト=「製品」

編集ない欲しいものです:この質問の下のコメントを参照してください、あなたはゲッターを持っている必要があります製品へのアクセスを一般に変更することができます。

+0

いいえ、彼は参照変数として製品を定義しました。 –

+1

参照変数?私は慎重に質問したが、それをもう一度見ていなかった...アクションクラスの変数製品は「製品」でなければならず、そのためのゲッタが必要である。 – Quaternion

3

マップ製品用にメモリが割り当てられていません。

製品の値を設定する直前に書き込み - Products = new Map();

この値をマップに設定します。これは、ビューの製品の値を入力するのに役立ちます。

1

Struts2のデータによると、事前分布はPreparableInterceptorで完了し、準備メソッドをオーバーライドする必要があります。あなたはPortal.jspを開いたときに

public void prepare() throws Exception { 
    Products = new HashMap(); 
    Products.put("1", "C#"); 
    Products.put("2", "Java"); 

} 
+0

準備メソッドは、execute()メソッドがフレームワークによって呼び出される前にいくつかのデータを準備する場合に使用します.Prepareメソッドはinit()メソッドに関連付けることができます。 –

+0

どのようなinit()メソッドを参照していますか? –

+0

私は、コードの実際の部分が主な作業を始める前に、あなたのための準備を担当するコンストラクタのようなメソッドについて話しています。 –

0

実際にはvaluestackに見えるが、それは対応するアクションを呼び出していません。このエラーcome.Becauseが負荷に、あなたはアクションonload.Implement調製可能を呼び出す必要が理由です取得していませんインターフェースと準備メソッドをオーバーライドし、その方法では、あなたのcode.``

関連する問題