使用Struts 2.0在tiles.xml中调用ActionClass

时间:2011-08-23 06:09:15

标签: struts2 tiles

我查看了使用struts2.0的tile示例,发现在tiles.xml中,jsp页面被调用为:

<definition name="welcome" extends="baseLayout">
  <put-attribute name="title"  value="Welcome"/>
  <put-attribute name="body"   value="/welcome.jsp"/>      

但我的问题是,如果我想调用动作类而不是.jsp页面而不是像

那样调用它
<definition name="friends" extends="baseLayout">
  <put-attribute name="title"  value="Friends"/>
  <put-attribute name="body"   value="/checkActionLink.action"/>      

当我尝试编写执行上面的代码而不是显示找不到checkActionLink.action的错误时......提前感谢帮助......

以下是web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.5">
    <display-name>Struts2Example15</display-name>
    <servlet>
        <servlet-name>tiles</servlet-name>
        <servlet-class>org.apache.tiles.web.startup.TilesServlet</servlet-class>
        <init-param>
            <param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name>
            <param-value>/WEB-INF/tiles.xml</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <listener>
        <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
    </listener>
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

2 个答案:

答案 0 :(得分:3)

经过大量研究后,我发现添加以下标记: 在web.xml中<dispatcher>FORWARD</dispatcher>问题得到解决。

现在出现问题的原因是什么? 根据我的理解,当我们添加任何操作作为<put-attribute/>标记的 value 属性的值时,请求将转发到上述操作,以便成功执行操作。

之前<dispatcher>FORWARD</dispatcher>标记丢失,因此导致此问题。

如果我的理解有任何更正,我将非常感激。

感谢。快乐的编码:)。

答案 1 :(得分:1)

我认为你不能。您需要创建一个jsp并在其中使用struts2 action标记。这可以调用一个动作并呈现它的页面的一部分。如果你只使用动作标签制作一个jsp,你可能会得到你想要的效果。从来没有尝试过这个,但你可以在调用jsp之前将tile中的action和namespace的名称插入action标签。

我很想知道这对你有什么影响。