转发后请求属性不可用,只有会话属性可用

时间:2016-07-11 08:52:11

标签: jsp struts-1

我正在使用java 1.6,struts和jstl-1.2.jar,我尝试使用jstl核心标记在jsp中打印列表。当我使用会话范围属性(${sessionScope.myList})时,核心标记就是值正确但是当我使用请求范围属性(${requestScope.myList})时,核心标记不会使用这些值

听到是web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app 
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

      <!-- Standard Action Servlet Configuration (with debugging) -->
      <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
          <param-name>config</param-name>
          <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>2</param-value>
        </init-param>
        <init-param>
          <param-name>detail</param-name>
          <param-value>2</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
      </servlet>

        <servlet>
            <servlet-name>DownloadServlet</servlet-name>
            <servlet-class>DownloadServlet</servlet-class>
            <init-param>
                <param-name>dir</param-name>
                <param-value>/home/engneer/workspace/SLTTEN-MTN-V2/web/web_content/tenderdocs</param-value>
            </init-param>
        </servlet>

            <servlet>
            <servlet-name>dwr-invoker</servlet-name>
            <display-name>DWR Servlet</display-name>
            <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
            <init-param>
                <param-name>debug</param-name>
                <param-value>true</param-value>
            </init-param>
        </servlet> 


        <servlet>
          <servlet-name>ServletConfiguratorSLT</servlet-name>
          <servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
          <init-param>
            <param-name>propertyFile</param-name>
            <param-value>WEB-INF/classes/resources/ProxoolSLT.properties</param-value>
          </init-param>
          <load-on-startup>1</load-on-startup>
        </servlet> 

        <servlet>
          <servlet-name>ServletConfiguratorCICOSE</servlet-name>
          <servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
          <init-param>
            <param-name>propertyFile</param-name>
            <param-value>WEB-INF/classes/resources/ProxoolCICOS.properties</param-value>
          </init-param>
          <load-on-startup>1</load-on-startup>
        </servlet> 

      <servlet>
      <servlet-name>proxool</servlet-name>
      <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
      </servlet>


        <servlet-mapping>
            <servlet-name>DownloadServlet</servlet-name>
            <url-pattern>/servlet/DownloadServlet</url-pattern>
        </servlet-mapping>


      <!-- Standard Action Servlet Mapping -->
      <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
      </servlet-mapping>

        <servlet-mapping>
            <servlet-name>dwr-invoker</servlet-name>
            <url-pattern>/dwr/*</url-pattern>
        </servlet-mapping>

      <servlet-mapping>
        <servlet-name>proxool</servlet-name>
        <url-pattern>/servlet/admin</url-pattern>
      </servlet-mapping>


      <!-- Session time out -->
      <session-config>
        <session-timeout>120</session-timeout>
      </session-config>


      <!-- The Usual Welcome File List -->
      <welcome-file-list>
        <welcome-file>public_dashboard.jsp</welcome-file>
        <welcome-file>login.jsp</welcome-file>
      </welcome-file-list>


      <!-- Error page specification -->
      <error-page>
        <error-code>500</error-code>
        <location>/errors/500.htm</location>
      </error-page>

      <error-page>
        <error-code>404</error-code>
        <location>/errors/404.htm</location>
      </error-page>


      <!-- Struts Tag Library Descriptors -->
      <taglib>
        <taglib-uri>/tags/struts-bean</taglib-uri>
        <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
      </taglib>

      <taglib>
        <taglib-uri>/tags/struts-html</taglib-uri>
        <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
      </taglib>

      <taglib>
        <taglib-uri>/tags/struts-logic</taglib-uri>
        <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
      </taglib>

      <taglib>
        <taglib-uri>/tags/struts-nested</taglib-uri>
        <taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
      </taglib>

      <taglib>
        <taglib-uri>/tags/struts-tiles</taglib-uri>
        <taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
      </taglib>

    </web-app>

ActViewTender.java

public class ActViewTender
    extends Action {
    static Logger logger = Logger.getLogger(ActViewTender.class);

  public ActionForward execute(ActionMapping mapping,
                               ActionForm form,
                               HttpServletRequest request,
                               HttpServletResponse response) throws Exception {

    String realPath = getServlet().getServletContext().getRealPath("/WEB-INF/log4jConfiguration.xml");
    DOMConfigurator.configure(realPath);

    try {

        ReverseAuctionTender reverseAuctionTender = new ReverseAuctionTender();
        ISupplier supplier = new Supplier();

        List<TenderEnt> tendeList = reverseAuctionTender.ViewReverseAuctionTender(conn, strSupID);

        List<TenderEnt> ReverseAuctionTenderList = new ArrayList<TenderEnt>();

        List<String> watchList = supplier.getAddtoWatchListTender(conn, strSupID);


        try {
            for (TenderEnt tenderEnt : tendeList) {
                String isWatched = "";
                for (String wl : watchList) {
                    if (wl.equals(tenderEnt.getTenderNo().trim())) {
                        isWatched = "watched";
                    } 
                }

                tenderEnt.setIsWatched(isWatched);
                ReverseAuctionTenderList.add(tenderEnt);

                 }

            request.setAttribute("myList", ReverseAuctionTenderList);
        }
        catch (Exception e) {
            e.printStackTrace();
            logger.fatal(e.getMessage());
        }

        forward = mapping.findForward("SupplierMain");
      } 
    return forward;
  }
}

听到的是jsp代码

<c:forEach items="${requestScope.myList}" var="tender">
    <div class="small-12 tender auction-type online-tenders">
         <div class="small-12 tender-number"><c:out value="${tender.tenderNo}"></c:out></div>
         <div class="small-12 tender-detail">
            <div class="small-12 medium-7 large-9 columns collapse tender-title">
                        <h4>${tender.description}</h4>
            </div>
         </div>
    </div>
</c:forEach>

结果当我从servlet设置为session变量时,我只得到相同的列表(request.getSession().setAttribute("myList", ReverseAuctionTenderList);<c:forEach items="${sessionScope.myList}" var="tender">)它工作正常

1 个答案:

答案 0 :(得分:0)

这是因为struts映射文件中的redirect =“true”。当redirect = true时,转发时会清除请求中存储的数据。

删除此部分应该有帮助。