Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I iterate over all my model attributes on my JSP page?

I'm using Spring 3.2.11.RELEASE with JBoss 7.1.3.Final and Java 6. I have this method in a controller

@RequestMapping(value = "/method", method = RequestMethod.GET)
public String myMethod(final Model model,
                        final HttpServletRequest request,
                        final HttpServletResponse response,
                        final Principal principal) 

...
    model.addAttribute("paramName", "paramValue");

Notice how I add attributes into my model. My question is, on the JSP page that this page serves, how do I iterate over all the attributes in my model and output them as HIDDEN input fields with the name of the INPUT being the attribute name and the value being what I inserted in the model using that attribute?

Edit: In response to the answer given, here was the output to the JSP solution. Note there are no model attributes in there.

        <input type='hidden' name='javax.servlet.jsp.jspRequest' value='org.springframework.web.context.support.ContextExposingHttpServletRequest@7a0a4c3f'>

        <input type='hidden' name='javax.servlet.jsp.jspPageContext' value='org.apache.jasper.runtime.PageContextImpl@3939794a'>

        <input type='hidden' name='appVersion' value='???application.version???'>

        <input type='hidden' name='javax.servlet.jsp.jspResponse' value='org.owasp.csrfguard.http.InterceptRedirectResponse@722033be'>

        <input type='hidden' name='javax.servlet.jsp.jspApplication' value='io.undertow.servlet.spec.ServletContextImpl@14c1252c'>

        <input type='hidden' name='org.apache.taglibs.standard.jsp.ImplicitObjects' value='javax.servlet.jsp.el.ImplicitObjectELResolver$ImplicitObjects@23c27a49'>

        <input type='hidden' name='javax.servlet.jsp.jspOut' value='org.apache.jasper.runtime.JspWriterImpl@b01a1ba'>

        <input type='hidden' name='javax.servlet.jsp.jspPage' value='org.apache.jsp.WEB_002dINF.views.lti.launch_jsp@1dcc48bf'>

        <input type='hidden' name='javax.servlet.jsp.jspConfig' value='io.undertow.servlet.spec.ServletConfigImpl@3fd40806'>
like image 311
Dave Avatar asked Jan 13 '17 19:01

Dave


1 Answers

Model attributes are "request scope" objects you can do the following (I use JSTL):

    <c:forEach items="${requestScope}" var="par">
        <c:if test="${par.key.indexOf('attrName_') > -1}">
            <li>${par.key} - ${par.value}</li>
        </c:if>
    </c:forEach>

Since with no filter you will have all the request scope objects, I filtered by the model attributes we wanted to check

I tested by using this code:

@RequestMapping(method = { RequestMethod.GET }, value = { "/*" })
    public String renderPage(Model model) throws Exception
    {
        String requestedUrl = req.getRequestURI();
        int indice = requestedUrl.lastIndexOf('/');
        String pagina = requestedUrl.substring(indice + 1);
        try
        {
            String usernameUtente = "default username utente";
            if (StringUtils.hasText(getPrincipal()))
            {
                usernameUtente = getPrincipal();
            }
            model.addAttribute("usernameUtente", usernameUtente);
            model.addAttribute("webDebug", webDebug);
            for(int i = 0; i<10; i++)
            {
                model.addAttribute("attrName_"+i, "attrValue_"+i);
            }
            return pagina;
        }
        catch (Exception e)
        {
            String message = "Errore nell'erogazione della pagina " + pagina;
            logger.error(message, e);
            return "genericError";
        }
    }

And this is what I see as output (I omitted the not relevant prints but please note you'll print ALL the request scope objects:

attrName_0 - attrValue_0
attrName_1 - attrValue_1
attrName_2 - attrValue_2
attrName_3 - attrValue_3
attrName_4 - attrValue_4
attrName_5 - attrValue_5
attrName_6 - attrValue_6
attrName_7 - attrValue_7
attrName_8 - attrValue_8
attrName_9 - attrValue_9

I hope this can help

Angelo

like image 154
Angelo Immediata Avatar answered Sep 29 '22 05:09

Angelo Immediata