问题:No result defined for action cn.bbs.nhpop.web.action.ReplyTopic Action and result input 错误
意思是说没定义input的跳转结果.
@Override
public String execute() throws Exception {
topic = topicService.getTopic(topicId);
reply.setTopic(topic);
replyService.replyTopic(reply);
return this.SUCCESS;
}
public String execute() throws Exception {
topic = topicService.getTopic(topicId);
reply.setTopic(topic);
replyService.replyTopic(reply);
return this.SUCCESS;
}
原因:我的cn.bbs.nhpop.web.action.ReplyTopic Action execute方法返回SUCCESS,但是实际运行中出现了错误(抛了异常),Action并没有返回SUCCESS而是返回INPUT(Action 出现错误时默认的返回值),而我的struts.xml配置文件中并没有定义与INPUT对应的Result
<
action
name
="replyTopic"
class ="cn.bbs.nhpop.web.action.ReplyTopic" >
< result name ="success" type ="chain" >
< param name ="actionName" > listTopicsDetails </ param >
</ result >
</ action >
class ="cn.bbs.nhpop.web.action.ReplyTopic" >
< result name ="success" type ="chain" >
< param name ="actionName" > listTopicsDetails </ param >
</ result >
</ action >
解决方法:你可以添加一个与INPUT对应的Result或者解决Action方法实际运行中的异常。
我的Action到底抛了个什么异常呢?
<
s:form
action
="replyTopic"
>
< s:hidden name ="topicId" value ="%{topicId}" ></ s:hidden >
< %-- <s:param name ="topicId" value ="%{topicId}" ></ s:param > --%>
</ s:form >
这是我的reply.jsp,开始我使用<s:param></s:param>传topicId,想当然的认为可以 与<s:form></s:form>合用传参,导致replyTopic Action无法获取到topicId的值
< s:hidden name ="topicId" value ="%{topicId}" ></ s:hidden >
< %-- <s:param name ="topicId" value ="%{topicId}" ></ s:param > --%>
</ s:form >
@Override
public String execute() throws Exception {
topic = topicService.getTopic(topicId);
reply.setTopic(topic);
replyService.replyTopic(reply);
return this.SUCCESS;
}
topic为null抛异常。(<s:url action=""><s:param></s:param></s:url>是可以这样传参的,但与<s:form></s:form>不行)
public String execute() throws Exception {
topic = topicService.getTopic(topicId);
reply.setTopic(topic);
replyService.replyTopic(reply);
return this.SUCCESS;
}
后来用<s:hidden></s:hidden>代替解决。另外
<
s:hidden
name
="topicId"
value
="topicId"
></
s:hidden
>
value="%{topicId}"切不可省去%{}否则Action中的topicId的值为字符串为"topicId"而不是我希望的int值1,%{topicId}相当于
<
s:property
value
="topicId"
/>
你可以使用%{}或嵌套<s:property>标签。struts2标签的属性可以接受一个字符串的值的时候请大家尤其注意,必须使用%{} 或<s:property>才会是你想要的值。比如:
<
s:hidden
name
="topicId"
value
="%{topicId}"
></
s:hidden
>
< s:url id ="toReply" action ="toReply" >
< s:param name ="topicId" value ="topicId" ></ s:param >
</ s:url >
< tr >
< td height ="18" colspan ="2" >
< s:a href ="%{toReply}" > 回复 </ s:a >
</ td >
</ tr >
< s:url id ="toReply" action ="toReply" >
< s:param name ="topicId" value ="topicId" ></ s:param >
</ s:url >
< tr >
< td height ="18" colspan ="2" >
< s:a href ="%{toReply}" > 回复 </ s:a >
</ td >
</ tr >