Monday, June 11, 2012

GET requests with Struts 2

So with Struts 2 when you activate a .action URL that is mapped in the framework, it is no problem at tack on request variables in the URL that will then get passed to a .jsp page or what have you. So here is an example of handling this in the Struts 2 framework:

This is where I generate the URL (e.g. it will look like: 'CodeSnipetById.action?codeid=5')


<table>
        <%
        Session s = HibernateUtil.getSessionFactory().getCurrentSession();
        s.beginTransaction();
      
        CodeSnipet snipet = new CodeSnipet();
        Criteria c = s.createCriteria(CodeSnipet.class);
      
        c.addOrder(Order.desc("idcodesnipets")).setMaxResults(20);
      
        out.print("<tr>");
        out.print("<td>Name</td>");
        out.print("<td>File</td>");
        out.print("<td>Date</td>");
        out.print("</tr>");
        List l = c.list();
        for(Integer i = 0; i < l.size(); i++) {
            snipet = (CodeSnipet)l.get(i);
            String linkBegin = "<a href='CodeSnipetById.action?codeid=";
            String linkEnd = "'>";
            out.print("<tr>");
            out.print("<td>" + linkBegin + snipet.getIdcodesnipets().toString() + linkEnd + snipet.getCodetitle() + "</a></td>");
            out.print("<td>" + snipet.getCodefilename() + "</td>");
            out.print("<td>" + snipet.getStamp().toString() + "</td>");
            out.print("</tr>");
        }
        %>
        </table>
So then within your struts.xml file your action will look like:


          <!-- this goes to show snipet, just with a GET request parameter! -->

                    <action name='CodeSnipetById'>
                        <result>/hibernateTesting/showSnipet.jsp</result>
                    </action>



Finally, in the JSP page that handles this, you will pull the data in via request.getParameter("stringparametername"). If your request is not set it will return 'null' so you can test for a null value like you would test with isset($_GET['whatever']) in PHP. Here is an example of handling the get request and passing into hibernate to pull up some records:


       Session s = HibernateUtil.getSessionFactory().getCurrentSession();
        s.beginTransaction();
        CodeSnipet snipet = new CodeSnipet();
      
        if(request.getParameter("codeid") == null) {
            Criteria c = s.createCriteria(CodeSnipet.class);
            c.addOrder(Order.desc("idcodesnipets")).setMaxResults(1);
            List l = c.list();
            snipet = (CodeSnipet)l.get(0);
            }
         else {
            try {
                Integer myId = Integer.parseInt(request.getParameter("codeid"));
                snipet = (CodeSnipet) s.get(CodeSnipet.class, myId);
            } catch (Error e) {
                Integer myId = 1;
                snipet = (CodeSnipet) s.get(CodeSnipet.class, myId);
                }           
            }


Our 'snipet' object is the Bean we pull the data from.

No comments:

Post a Comment