1

次のような struts2 アクション クラスがあります。

//import relevant packages

public class Product implements SessionAware, ServletRequestAware,
        ServletResponseAware, ServletContextAware {

    private String productName;
    private String description;
    private String price;

    private ServletContext servletContext; 
    private HttpServletRequest servletRequest; 
    private HttpServletResponse servletResponse; 
    private Map sessionMap;

    //getters and setters here

    public void setServletRequest(HttpServletRequest servletRequest) {
        this.servletRequest = servletRequest;
    }

    public void setSession(Map map) {
        this.sessionMap = map;
    }

    public void setServletResponse(HttpServletResponse servletResponse) {
        this.servletResponse = servletResponse;
    }

    public void setServletContext(ServletContext servletContext) {
        this.servletContext = servletContext;
    }

    public String execute() {


       //  do something here
        return "success";
    }

    public List<String> getCountries() {
        List<String> countries = new ArrayList<String>();
        countries.add("Australia");
        countries.add("Fiji");
        countries.add("New Zealand");
        countries.add("Vanuatu");
        return countries;
    }

}

sruts.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" />
    <package name="package.name" namespace="/" extends="struts-default">
        <action name="Product_input">
            <result>/jsp/Product.jsp</result>
        </action>
        <action name="Product_save" class="package.name.Product" method="execute">
            <result>/jsp/Details.jsp</result>
        </action>       
    </package>
</struts>

Product.jsp は単純なフォームで構成されています。

<s:form action="Product_save">
        <s:textfield label="Product Name" key="productName"/>
        <s:textfield label="Description" key="description"/>
        <s:textfield label="Price" key="price"/>
        <s:submit/>
</s:form>

Details.jsp は、フォームに入力された内容を表示します。

<h5>Details:</h5>
Product Name:
<s:property value="productName" />
<br /> Description:
<s:property value="description" />
<br /> Price: $
<s:property value="price" /> </br>
<s:property value="countries[0]" /> </br>

Details.jsp の最後の行は、アクション クラスの getCountries() で宣言された国リストにアクセスしようとします。理想的には、メソッドがアクセスされることはなく、国リストがアクション クラスの属性の一部であるため、何も出力しないことが理想的です (したがって、 Value スタックに Product タイプのオブジェクトを作成する場合、国を含めることはできません)。

ただし、オーストラリア (リストのインデックス付きの値) を他のフォーム プロパティと共に出力します。どのように/なぜこれが起こっているのですか?

4

2 に答える 2

1

記入countriesすると

countries[0]

メソッドを呼び出しますgetCountries()。あなたが[0]その隣に置いcountriesてリストになっているように...

それはに変換されます

getCountries().get(0)

sysoutメソッドに aを入れることで同じことを確認できますgetCountries()

于 2012-08-23T06:09:05.503 に答える
0

struts では、「プロパティ」属性を使用して Bean の値にアクセスします。プロパティ属性を使用すると、その getter メソッドが呼び出されるため、上記のコードでは getCountries() メソッドが呼び出されます。

于 2012-08-23T06:32:47.133 に答える