2

我一直在尝试将 Tiles 与基于 Struts 2 注释的操作集成,但它无法正常工作。

由于我没有,struts-config.xml并且在网络上可用的每个教程中,他们都使用struts-config.xml.

首先,是否可以将基于注释的 struts 动作与瓦片集成。如果是,那怎么办?

@Action(value="/login",results={@Result(name="success",location="/home",type=TilesResult.class),
            @Result(name="login",location="/jsp/userLogin.jsp")})
    public String execute() {

这就是我的代码,但它总是在 MyEclipse 中给我TilesResult.class错误

Type mismatch: cannot convert from Class<TilesResult> to String

我的 pom 中有依赖项:

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-tiles-plugin</artifactId>
    <version>2.1.8</version>
</dependency>

谁能帮助我如何在基于注释的操作中添加图块


我使用type="tiles"而不是type=TilesResult.classthen 它给了我以下异常

Caused by: The Result type [tiles] which is defined in the Result annotation on the class [class com.actions.LoginAction] or determined by the file extension or is the default result type for the PackageConfig of the action, could not be found as a result-type defined for the Struts/XWork package [com.actions#convention-default#] - [unknown location]
    at org.apache.struts2.convention.DefaultResultMapBuilder.createResultConfig(DefaultResultMapBuilder.java:422)
    at org.apache.struts2.convention.DefaultResultMapBuilder.createFromAnnotations(DefaultResultMapBuilder.java:394)
    at org.apache.struts2.convention.DefaultResultMapBuilder.build(DefaultResultMapBuilder.java:202)
    at org.apache.struts2.convention.PackageBasedActionConfigBuilder.createActionConfig(PackageBasedActionConfigBuilder.java:800)
    at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildConfiguration(PackageBasedActionConfigBuilder.java:586)
    at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionConfigs(PackageBasedActionConfigBuilder.java:318)
    at org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(ClasspathPackageProvider.java:53)
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:204)
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
4

2 回答 2

4

试试这些:

  1. 使用type="tiles"代替type="TilesResult.class"

  2. 在结果位置使用您的目标图块定义,location="tiles-definition-name"而不是 JSP 页面,location="/jsp/userLogin.jsp"

  3. 有以下内容web.xml

    <context-param> <param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name> <param-value>/WEB-INF/tiles.xml</param-value> </context-param> <listener> <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class> </listener>

  4. 在您的struts.xml(如果您单独使用注释而不使用注释struts.xml,那么您必须为此创建一个最小的注释,因为没有可用于定义自定义结果类型的注释)

    <struts> <constant name="struts.convention.default.parent.package" value="codeoftheday.blogspot.com"/> <package name="codeoftheday.blogspot.com" extends="struts-default"> <result-types> <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" /> </result-types> </package> </struts>

注意:我已经在此问题上写了一篇详细的博客文章 - Maven、Struts2 Annotations 和 Tiles Integration Example via Convention / Codebehind / Zero Config plugin using Eclipse IDE

于 2013-07-21T15:10:49.650 回答
0
  1. “org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG”这个定义不适用于 Strut 2.5.10.1
  2. 我在我的项目中使用了以下 jars。
    • struts2-core-2.5.10.1
    • struts2-convention-plugin-2.5.10.1
    • struts2-tiles-plugin-2.5.10.1
    • javax.servlet-api-3.0.1

请将您的 web.xml 与以下代码进行比较。

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    <init-param>
        <param-name>actionPackages</param-name>
        <param-value>com.demo.action</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<context-param>
    <!-- <param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name> -->
    <param-name>org.apache.tiles.definition.DefinitionsFactory.DEFINITIONS_CONFIG</param-name>
    <param-value>/WEB-INF/config/tiles.xml</param-value>
</context-param>

<listener>
    <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
</listener>
于 2017-04-14T10:56:55.267 回答