2016-08-20 5 views
0

Struts2 2.3.28 J2EE Webアプリケーションに問題があり、Apache Tomcat 8にデプロイされています。フォームが存在し、Struts2がJSPからアクションクラスへのテキストフィールドを正しくマッピングしていない

classificazioni.jsp:いくつかの名前のテキストフィールド

EditCategorie:

<s:form action="editCategorie" > 
<s:textfield label="Nome" name="namedCat" value="ciao"/> 
<!-- 
    <s:textfield label="Nome" name="catBean.namedCat" value="ciao"/> 
--> 

... 

私は、プロパティの宣言とゲッターとセッターを提供するそれぞれのActionClass、にこのテキストフィールドの値にアクセスしたいです。 java:

private String namedCat; 

public String getNamedCat() { 
    return namedCat; 
} 

public void setNamedCat(String namedCat) { 
    this.namedCat = namedCat; 
} 

/* 
private CatBean catBean; 


public CatBean getCatBean() { 
    return catBean; 
} 

public void setCatBean(CatBean catBean) { 
    this.catBean = catBean; 
} 
*/ 

public String execute() 
{ 
    return SUCCESS; 
} 

public String display() 
{ 
    System.out.println(getNamedCat()); 
    // System.out.println(getCatBean().getNamedCat()); 
    return NONE;  
} 

私は、表示メソッドが呼び出されたときにwebappが正しく動作し、namedCatのテキストフィールド値を出力することがわかっています。ここに私のstruts.xml興味深い部分です:

<interceptors> 
    <interceptor-stack name="mystack"> 
     <interceptor-ref name="defaultStack" /> 
    </interceptor-stack> 
</interceptors> 

<action name="editCategorie" class="it.unisalento.se.actions.EditCategorie"> 
     <interceptor-ref name="mystack"/> 
     <result name="success" type="tiles">classificazioni</result> 
    </action> 

    <action name="showCategorie" class="it.unisalento.se.actions.EditCategorie" method="display"> 
     <interceptor-ref name="mystack"/> 
     <result name="none" type="tiles">classificazioni</result> 
    </action> 

「あなたは、コードを読んで気づいたとして、私はちょうど、2つの異なるアプローチを試してみたが、私は、コンソールショーEditCategorieの表示方法にnamedCatを印刷しようとすると、 Beanのアプローチでは、私はStruts2が自動的にBeanクラスを適切な属性で自動的にインスタンス化するはずですが、これは起こりません。明らかに、catBeanインスタンスのnamedCatプロパティにアクセスしようとすると、 NullPointerException。

結局これもCatBean.javaクラスです:

public CatBean() 
{ 

} 

private String namedCat; 

public String getNamedCat() { 
    return namedCat; 
} 

public void setNamedCat(String namedCat) { 
    this.namedCat = namedCat; 
} 

は私がメインStruts2の利点は、直接サーブレットのロジックの使用を避けることであることを、ここで何度も読んだことがある、とも私は、このことを、ここで読んだことがあります2つのアプローチが有効です。 ModelDrivenのアプローチを使うこともできますが(これは他のアクションでもうまくいきます)、パラメトリックなテキストフィールドを扱わなければならないので、そうではありません。

答えて

0

Struts 2アクションは、要求ごとにインスタンス化されます。

showCategorieのURLをヒットしたときに、新たにインスタンス化されたアクションにデータが存在せず、したがって何も表示されません。値を維持したい場合は、データベース、セッション、アプリケーションなどどこかに保持する必要があります。

関連する問題