我在部署并运行到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方法(这在其他操作中可以很好地工作),但是我必须处理参数化文本字段,所以事实并非如此。