2016-08-20 21 views
0

我在部署并运行到Apache Tomcat 8中的Struts2 2.3.28 J2EE webapp时遇到了问题。我有一个JSP文件,其中存在表单并且它包含文本框与一些名字:Struts2没有正确地将JSP中的文本字段映射到Action类

classificazioni.jsp:

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

... 

我想访问该文本框的值到相应的ActionClass,其中我公司提供的财产的申报和getter和setter:

EditCategorie。 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> 

我只是尝试了两种不同的方法,因为你已经注意到了阅读的代码,但是当我尝试打印namedCat到EditCategorie的显示方法的控制台显示“ null',尽管我知道Struts2应该使用正确的填充属性自动实例化bean类,但是这并不会发生,显然当我尝试访问catBean实例的namedCat属性时,我得到空指针异常。

最终,这也是CatBean.java类:

public CatBean() 
{ 

} 

private String namedCat; 

public String getNamedCat() { 
    return namedCat; 
} 

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

我在这里,主要Struts2的优点是看了很多遍,以避免直接使用Servlet的逻辑,也是我在这里读了这两种方法应该工作。我知道我也可以使用ModelDriven方法(这在其他操作中可以很好地工作),但是我必须处理参数化文本字段,所以事实并非如此。

回答

0

Struts 2操作按请求实例化。

当您点击showCategorie URL时,新实例化操作中没有数据,因此无法显示。如果你想坚持这个价值,你需要将它保留在某个地方,例如数据库,会话,应用程序等。

相关问题