1.问题描述
我们在struts中,当我们用<a>标签来实现链接时,都会采用通配符的方式来实现,具体代码如下。
jsp页面中
<a href="wjaddUser.action">添加</a>
<a href="wjdeleteUser.action">删除</a>
<a href="wjmodifyUser.action">修改</a>
<a href="wjsearchUser.action">查询</a>
<a href="wjdeleteUser.action">删除</a>
<a href="wjmodifyUser.action">修改</a>
<a href="wjsearchUser.action">查询</a>
xml文件中
<package name ="wj" extends="struts-default">
<action name = "wj*User" class="wj.action.WjLogin" method="{1}">
<result name = "add" >/wjaddUser.jsp</result>
<result name = "delete" >/wjdeleteUser.jsp</result>
<result name = "modify" >/wjmodifyUser.jsp</result>
<result name = "search" >/loginSuc.jsp</result>
</action>
</package>
<action name = "wj*User" class="wj.action.WjLogin" method="{1}">
<result name = "add" >/wjaddUser.jsp</result>
<result name = "delete" >/wjdeleteUser.jsp</result>
<result name = "modify" >/wjmodifyUser.jsp</result>
<result name = "search" >/loginSuc.jsp</result>
</action>
</package>
action(java文件)中
public String add(Object object) {
return "add";
}
public String delete(Object object) {
return "delete";
}
public String modify() {
return "modify";
}
但是会出错,错误就是
return "add";
}
public String delete(Object object) {
return "delete";
}
public String modify() {
return "modify";
}
但是会出错,错误就是
java.lang.NoSuchMethodException: wj.action.WjLogin.add()
这个问题说的是add()方法找不到
2.解决方法
那么我们来分析一下这问题。add()是个无参的函数,在我们的java文件中定义的是一个含参的方法。但是我们xml文件中method对应的属性值,默认调用的是无参的方法。因此自然会找不到add()方法。(原因很简单,因为我们没有定义)。
解决方案自然定义一个无参的方法。
3.传参问题
struts2默认调用的是无参的方法,因而我们必须定义无参方法。但是,实际情况下,我们需要传参并要在其对应的方法里使用这个参数进行相关的操作。
我们知道在jsp中定义了多种传参的方式,那么在这里我只举一种说明。
jsp页面中传参那
<a href="wjaddUser.action?id=<%= 1%>"
java文件中(action对应的类)
这里我们要进行的操作就是获取jsp页面中传来的参数
String id = ServletActionContext.getRequest().getParameter("id");
System.out.println("id"+id);
System.out.println("id"+id);
4.回顾总结
就现阶段的学习struts来说,感觉他就是对jsp的一些改进,很多时候他还是需要借助servlet的中的方法来实现一些功能。因此struts与servlet的结合,是很关键的一步。这个过程就要通过ServertActionContext来实现。struts有待改进。比如说,调用含参的自定义的函数。