首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

小弟我想知道<s:action> 与<s:a> 的区别

2013-06-19 
我想知道s:action 与s:a 的区别最近写网站遇到了关于s:action/的问题,我就写了个小程序测试了下,但

我想知道<s:action> 与<s:a> 的区别
最近写网站遇到了关于<s:action/>的问题,我就写了个小程序测试了下,但结果很让我不解。这个测试程序的结构是这样的
小弟我想知道<s:action> 与<s:a> 的区别
index.jsp页面是这样的

 <body>
    <s:a href="show.action">点我</s:a>
  </body>

struts.xml中这样配置
<package name="default" namespace="/" extends="struts-default">
        <action name="show" class="com.test.action.Show">
        <result>show.jsp</result>
        </action>
    </package>

action是这样的
public class Show extends ActionSupport {
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return SUCCESS;
}
}

在show.jsp中输出一句话
<body>
    <h1>hello</h1>
  </body>

这样写的话,页面可以正常显示。但是我把Index.jsp中的<s:a>改成<s:action>就会报错
<body>
    <%-- <s:a href="show.action">点我</s:a> --%>
    <s:action name="show.action" executeResult="true"></s:action>
  </body>
 
报的错误
SEVERE: Could not execute action: /show.action
There is no Action mapped for action name show.action. - [unknown location]
at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)
at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
at org.apache.struts2.components.ActionComponent.executeAction(ActionComponent.java:289)
at org.apache.struts2.components.ActionComponent.end(ActionComponent.java:175)
at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42)
at org.apache.jsp.index_jsp._jspx_meth_s_005faction_005f0(index_jsp.java:128)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:97)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)


at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722) struts2
[解决办法]

引用:
Quote: 引用:

你和饭碗有什么区别?答案是根本就没联系,何谈区别

<s:a 在页面上最终留下一个html 的<a>
<s:action 页面上什么也留不下,它是在解析jsp时调用后台的方法用的。name要的是action的名字而不是请求地址的后半部分。

<s:action name="show" id="showc"/>

<s:property value="#showc.方法"/>

一般是这么用的

你好,我知道<s:action>中的name是action的名字。我要做的就是在这个页面加载时自动执行那个action而不是要点击才执行

那不是已经跟你说了么?
<s:action name="show" id="showc"/>
这句话的意思就是说showc指向了show这个action类
如果你想执行里面的方法就这样
<s:property value="#showc.方法"/>

<s:select list="#showc.xx方法" />这个select就的list值就是方法的返回值

热点排行
Bad Request.