【问题标题】:Struts2: can't call action before rendering index.jspStruts2:在渲染 index.jsp 之前不能调用动作
【发布时间】:2015-03-24 02:25:44
【问题描述】:

我已经在整个 SO 中搜索了这个,但没有找到具有相同症状的类似情况。我正在使用 Sruts2 并尝试在呈现我的应用程序 (index.jsp) 的主页之前调用一个操作。我真的相信这个动作没有被调用,因为我在没有被打印的动作的execute() 方法的开头有一个System.out.println()(用于调试目的)。确实 index.jsp 正在呈现(因为它是默认页面),但与操作相关的部分并未运行。总之,我认为问题可能出在struts.xml 文件中。以下是struts.xml 和操作文件:

Struts.xml:

<?xml version="1.0" encoding="UTF-8"?>

<!-- The core configuration file for the framework is the default (struts.xml) file
and should reside on the classpath of the webapp (generally /WEB-INF/classes). -->

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

  <!-- devMode equals debug information and reload everything for every request -->
  <constant name="struts.devMode" value="true" />
  <constant name="struts.ui.theme" value="simple" />

  <package name="faultinjector" extends="struts-default">

    <default-action-ref name="loadexperiments" />

    <action name="loadexperiments" class="faultinjector.action.LoadExperimentsAction" method="execute">
      <result name="success">/index.jsp</result>
    </action>

  </package>

</struts>

LoadExperimentsAction.java:

public class LoadExperimentsAction extends ActionSupport
{
    private static final long serialVersionUID = 4L;

    private ExperimentService service;
    private List <Experiment> experiments;

    @Override
    public String execute()
    {
        System.out.println("Hello!");

        return SUCCESS;
    }

    public ExperimentService getService()
    {
        return service;
    }

    public void setService(ExperimentService service)
    {
        this.service = service;
    }

    public List<Experiment> getExperiments()
    {
        return experiments;
    }

    public void setExperiments(List<Experiment> experiments)
    {
        this.experiments = experiments;
    }
 }

【问题讨论】:

  • 你要去index.jsp还是loadexperiments。您的网络服务器很可能只是呈现 index.jsp 而根本没有调用 Struts。您需要更改您的网络服务器配置。
  • Struts2 过滤器是否配置为针对您发出的请求?您可能配置错误或缺少正常运行所需的一些重要文件。您也没有在帖子中包含任何有用的信息,因此无法提供帮助。
  • 好的,通过 webserserver 配置你的意思是 web.xml?如果是这样,这就是它的内容:&lt;filter&gt; &lt;filter-name&gt;struts2&lt;/filter-name&gt; &lt;filter-class&gt;org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter&lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;struts2&lt;/filter-name&gt; &lt;url-pattern&gt;/*&lt;/url-pattern&gt; &lt;/filter-mapping&gt; 我也尝试将&lt;welcome-file-list&gt; &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt; &lt;/welcome-file-list&gt; 附加到它,但没有成功。
  • 好的,我遵循了@AleksandrM 的建议,并在建议的问题中作为 OP 做了。它现在正在工作(至少我知道我可以访问定义的操作)。我所做的是创建一个新的 index.jsp 文件,上面只有&lt;% response.sendRedirect("/FaultInjector/LoadExperiments.action"); %&gt;,在 struts.xml 中更改&lt;result name="success"&gt;/user_main.jsp&lt;/result&gt;,最后将原始 index.jsp 内容放在 user_main.jsp 中。我想有一种更优雅的方法可以实现这一点,如果有人有提示请告诉我。感谢所有的努力。

标签: struts2


【解决方案1】:

我终于设法实现了我正在寻找的东西,而无需重定向页面。基本上解决方案是保留我的原始配置,但将 JSP 页面名称从“index.jsp”更改为另一个(在我的情况下,它现在称为“user_main”.jsp)。这样,它奇怪地工作,我猜它在使用默认名称“index.jsp”时有一些隐藏的默认配置参数。我的配置文件内容:

web.xml

<web-app id="faultinjector" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <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>
    </filter-mapping>
</web-app>

struts.xml

<struts>
  <constant name="struts.devMode" value="true" />
  <constant name="struts.ui.theme" value="simple" />

  <package name="faultinjector" extends="struts-default">

  <default-action-ref name="loadexperiments" />

  <action name="loadexperiments" class="faultinjector.action.LoadExperimentsAction" method="execute">
      <result name="success">/user_main.jsp</result>
    </action>
  </package>
</struts>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-28
    • 2011-03-12
    • 2019-02-21
    • 1970-01-01
    • 2015-09-08
    • 2019-07-27
    • 1970-01-01
    • 2014-12-08
    相关资源
    最近更新 更多