Struts2: 无法在渲染前调用动作 index.jsp

Struts2: can't call action before rendering index.jsp

我在整个 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;
    }
 }

我终于设法实现了我正在寻找的目标,而不需要重定向页面。基本上解决方案是保留我的原始配置,但将 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>