利用struts2.3.15一个form提交多个submit
首先,我用的新版的struts2,3.15.所以旧版的struts2的回答就算了。要求很简单,就是主页面的form包含2个submit,通过struts提交并且以requ...
首先,我用的新版的struts2,3.15.所以旧版的struts2的回答就算了。
要求很简单,就是主页面的form包含2个submit,通过struts提交并且以request返回,在struts.xml中指向个新网页。上代码。
struts.xml文件:
<struts>
<package name="act" namespace="" extends="struts-default">
<action name="submit" class="act.Act">
<result name="print" type="redirect">/result.jsp</result>
<result name="save" type="redirect">/result.jsp</result>
</action>
</package>
</struts>
这里是一直报错,在act中没有返回success,我想问一下是否在result中必须至少有一个返回的name为success,否则不可运行?
Act代码:
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public class Act extends ActionSupport implements ServletRequestAware {
private static final long serialVersionUID = -4756269833482224903L;
private String msg;
private HttpServletRequest request;
public String save() throws Exception {
setMsg("save");
request.setAttribute("result", "save" + msg);
return "save";
}
public String print() throws Exception {
setMsg("print");
request.setAttribute("result", "print" + msg);
return "print";
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
}
一共就2个问题,第一是否必须至少一个result返回的为success。第二,JAVA代码中为何完全没有给request赋值,有代码最好,没有的话只要回答并解决这2个问题也可以
上面的type=“redirect”是我之前尝试解决错误的,错误之前就存在了。另外我现在已删掉了type。上面的没法改,特此注明
在线等答案。满意加50分。
断点测试不管我点什么,都是跳过了除了getset以外所有的方法,全部没有执行。我的代码大部分是照着一般早些的电子书改写的。求帮忙找到不执行方法的原因,可能2个问题都可以解决
首页代码
<s:form action="submit">
<s:textfield name="msg" lable="输入" />
<s:submit name="print" value="print" align="left" method="print"/>
<s:submit name="save" value="save" align="left" method="save"/>
</s:form> 展开
要求很简单,就是主页面的form包含2个submit,通过struts提交并且以request返回,在struts.xml中指向个新网页。上代码。
struts.xml文件:
<struts>
<package name="act" namespace="" extends="struts-default">
<action name="submit" class="act.Act">
<result name="print" type="redirect">/result.jsp</result>
<result name="save" type="redirect">/result.jsp</result>
</action>
</package>
</struts>
这里是一直报错,在act中没有返回success,我想问一下是否在result中必须至少有一个返回的name为success,否则不可运行?
Act代码:
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public class Act extends ActionSupport implements ServletRequestAware {
private static final long serialVersionUID = -4756269833482224903L;
private String msg;
private HttpServletRequest request;
public String save() throws Exception {
setMsg("save");
request.setAttribute("result", "save" + msg);
return "save";
}
public String print() throws Exception {
setMsg("print");
request.setAttribute("result", "print" + msg);
return "print";
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
}
一共就2个问题,第一是否必须至少一个result返回的为success。第二,JAVA代码中为何完全没有给request赋值,有代码最好,没有的话只要回答并解决这2个问题也可以
上面的type=“redirect”是我之前尝试解决错误的,错误之前就存在了。另外我现在已删掉了type。上面的没法改,特此注明
在线等答案。满意加50分。
断点测试不管我点什么,都是跳过了除了getset以外所有的方法,全部没有执行。我的代码大部分是照着一般早些的电子书改写的。求帮忙找到不执行方法的原因,可能2个问题都可以解决
首页代码
<s:form action="submit">
<s:textfield name="msg" lable="输入" />
<s:submit name="print" value="print" align="left" method="print"/>
<s:submit name="save" value="save" align="left" method="save"/>
</s:form> 展开
4个回答
展开全部
第一是否必须至少一个result返回的为success。
不是,你可以什么都不返回,你想下,要是你的java代码出错了,难道页面就没反应了吗?肯定不会的,你不反回值,而且java没抛异常,页面是一片空白,你可以试试。
第二,JAVA代码中为何完全没有给request赋值
没看明白你的意思request.setAttribute("result", "print" + msg);你这不是赋值是什么?
不是,你可以什么都不返回,你想下,要是你的java代码出错了,难道页面就没反应了吗?肯定不会的,你不反回值,而且java没抛异常,页面是一片空白,你可以试试。
第二,JAVA代码中为何完全没有给request赋值
没看明白你的意思request.setAttribute("result", "print" + msg);你这不是赋值是什么?
更多追问追答
追问
第一那个我试一下。第二那个如果把其中一个return改为success就可以执行,但转向页面的取值为空值,页面是空页面。取值用的${result}
追答
/result.jsp你的错误应该是这里
你这里加type="redirect"干嘛?这个不是防止重复提交的吗?你后面指向的是页面啊?我有点看不懂。页面取不到值原因有很多的,你先获取session,放到session里面再看下能不能获取到
把其中一个return改为success就可以执行
你是改哪个地方啊,方法的返回值吗?
展开全部
1) 不一定必须有success,success只是Struts2 中ActionSupport提供的默认返回名,可以任意修改。
2)Struts2中的ActionSupport类已经对request对象进行了封装,不希望你通过request对象来进行属性操作,而是希望你使用Struts2自带的ValueStack来传递属性,因此没有显性提供。如果想使用就需要像你那里一样覆写setServletRequest方法自行取得一个或者直接通过ServletActionContext.getRequest()方法来取得request对象。
PS:你的跳转方式都使用的是type="redirect"客户端跳转,所以即便设置了request范围的属性,页面也无法取得属性。
2)Struts2中的ActionSupport类已经对request对象进行了封装,不希望你通过request对象来进行属性操作,而是希望你使用Struts2自带的ValueStack来传递属性,因此没有显性提供。如果想使用就需要像你那里一样覆写setServletRequest方法自行取得一个或者直接通过ServletActionContext.getRequest()方法来取得request对象。
PS:你的跳转方式都使用的是type="redirect"客户端跳转,所以即便设置了request范围的属性,页面也无法取得属性。
更多追问追答
追问
1 我如果现在这段代码运行,就会报错HTTP Status 404 - No result defined for action act.Act and result success。改掉一个return为SUCCESS就可以成功运行。这是为什么。
2 复写方法存入request。在指向页面用${result}应该可以取值的么,但是为空。
ps.redirect我去掉了。那个是我之前找错误的。
追答
你先确定你提交表单是否真的进入了你声明的save或是print方法,如果提交时根本没有进入分发方法,那么会按照Action默认的execute方法来执行,而ActionSupport中的execute方法默认就会进入success。
因此你的问题应该是出在表单提交的路径上的。
检查你提交是否是 submit!save 或是 submit!print 路径
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的struts.xml文件中,result type="redirect" 一般是用来重定位到一个action的,你把type去掉试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一,不一定要返回name为success的result,第二,request可以在浏览器总传递,不用显示赋值,你只要在act获得并set属性就行,然后在页面就可以获得,它是jsp的内部对象
追问
关于第一,你感觉我写的这段代码有问题么?
可是我每次运行时的提示信息是
HTTP Status 404 - No result defined for action act.Act and result success
如果把其中一个改为success就可以执行。但转向页面取值为空,分别尝试使用${result}和
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询