【问题标题】:JSP page only receives the first arrayListJSP页面只接收第一个arrayList
【发布时间】:2015-01-12 20:37:57
【问题描述】:

在jsp页面中,只打印最先访问的函数。如果首先访问 function-1,则不会打印 function-2。如果首先访问 Function-2,则不会打印 Function-1。请有任何建议。

控制器:

populateTf(tfCount, request, response);
populateSa(saCount, request, response);

response.sendRedirect("testPage.jsp");

//FUNCTION-1
void populateTf(int tfCount, HttpServletRequest request, HttpServletResponse response){       
    ArrayList<TF> tfList = new ArrayList<TF>();

    String field1 = request.getParamter("xyz");
    String field2 = request.getParamter("xyz");
    String field3 = request.getParamter("xyz");

    tfList.add(new TF(field1, field2, field3));

    HttpSession session = request.getSession();
    session.setAttribute("tfList", tfList);
}

//FUNCTION-2
void populateSa(int saCount, HttpServletRequest request, HttpServletResponse response){       
    ArrayList<SA> saList = new ArrayList<SA>();

    String field1 = request.getParamter("xyz");

    saList.add(new SA(field1));

    HttpSession session = request.getSession();
    session.setAttribute("saList", saList);
}

业务对象:

public class TF{
    private String field1, field2, field3;
    public TrueFalse(String field1, String field2, String field3) {
        this.field1 = field1;
        this.field2 = field2;
        this.field3 = field3;
    }
    /* GETTERS AND SETTERS */
}    

public class SA{
   private String field1;
   public ShortAnswer(String field1) {
      this.field1 = field1;
   }
   /* GETTERS AND SETTERS */ 
} 

这里是 JSP 页面:

<table>      
        <c:forEach items="${sessionScope.tfList}" var="tf">
        <tr>
                <td>${tf.field1}</td>
                <td>${tf.field2}</td>
                <td>${tf.field3}</td>
        </tr>
        </c:forEach>
</table>

<table>         
        <c:forEach items="${sessionScope.saList}" var="sa">
        <tr>
                <td>${sa.field1}</td>               
        </tr>
        </c:forEach>
</table>

【问题讨论】:

    标签: java jsp model-view-controller taglib


    【解决方案1】:

    也许不是调用request.getSession() 两次,而是在你的servlet 中创建一个全局变量来保持会话,并且只调用一次request.getSession()。我也认为不需要向这两个函数传递请求和响应。

    private HttpSession session = null;
    
    public void doGet(HttpServletRequest request, HttpServletResponse  response) throws IOException, ServletException
    {
        session = request.getSession();
        ....
        populateTf(tfCount);
        populateSa(saCount);
        ....
    }
    
    private void populateTf(int tfCount)
    {       
        ArrayList<TF> tfList = new ArrayList<TF>();
    
        .... //where is field1, field2, field3 coming from anyway?
    
        tfList.add(new TF(field1, field2, field3));
    
        session.setAttribute("tfList", tfList);
    }
    
    private void populateSa(int saCount)
    {       
        ArrayList<SA> saList = new ArrayList<SA>();
    
        .... //where is field1 coming from anyway?
    
        saList.add(new SA(field1));
    
        session.setAttribute("saList", saList);
    }
    

    【讨论】:

    • 好主意。但仍然无法正常工作。获取空指针异常。
    • @fhaider,好吧,假设它来自session 仍然是null,当您调用session.setAttribute 时,因为您必须在实际入口点执行session = request.getSession();。我以为那是你的doGet。如果你在做 POST,它可能是你的doPost。可能是您使用了一些奇怪的框架和其他东西。我不知道。您基本上发布了伪代码,因此您将不得不自己弄清楚。
    • 空指针已解决。还是有之前的问题。只打印第一个arrayList。我在它们的来源处添加了 field1、field2 和 field3。
    猜你喜欢
    • 2012-11-11
    • 2015-04-02
    • 2013-12-13
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 2012-01-30
    相关资源
    最近更新 更多