paramValues不在JSTL中工作并抛出异常?

时间:2014-03-26 11:44:20

标签: jstl

这是我的第一页

    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
     </head>
     <body>
        <form action="newjstl.jsp" method="post">  
     FirstName:<input type="text" name="fname"/><br/>  
     LastName:<input type="text" name="lname"/><br/>  
     <input type="submit" value="submit"/>  
     </form>  
      </body>
      </html>

第二页是

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  

    <c:forEach var='value' items='${paramValues}'>
          First Name:<c:out value="${value.fname}"></c:out><br/>  
          Last Name:<c:out value="${value.lname}"></c:out>  
        </c:forEach>

抛出异常 org.apache.jasper.JasperException:javax.el.PropertyNotFoundException:类'java.util.HashMap $ Entry'没有属性'fname'。<登记/> 我不知道为什么它不起作用。

4 个答案:

答案 0 :(得分:1)

请参阅http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html#wp71044

paramValues是参数图。它将参数名称(地图的键)映射到它们的值(String数组)。

你正在迭代这张地图。因此,forEach循环遍历地图的条目,其类型为Map.Entry<String, String[]>。而Map.Entry没有任何getFname()方法。

你真正想要的是

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  

First Name:<c:out value="${param.fname}" /><br/>  
Last Name:<c:out value="${param.lname}" />  

没有理由循环,你只想获得给定参数的单个值。那就是param的用途。

答案 1 :(得分:1)

JB Nizet说得对。

假设&#39; fname&#39;被设置为&#34; George&#34;和&#39; lname&#39;被设定为史密斯&#34;在第一页&#39;。

&#39; paramValues&#39;是一个HashMap,所以当你在每个&#39;中使用它时,你会得到什么&#39; value&#39;是Map.Entry,而Map.Entry没有&#39; fname&#39;字段,所以没有&#39; getFname&#39; JSP调用的方法。

如果你坚持,&#39;重视&#39;可以用作&#39; $ {value.key}&#39;和&#39; $ {value.value}&#39;,但这会得到你们对:

'fname', "George"
'lname', "Smith"

分别。我怀疑这是你想要的。使用&#39; forEach&#39;的唯一原因如果您期待多个答案并且需要遍历所有答案,那就好了。这不是什么原因。

以下内容是从Implicit Objects复制而来的,并且几乎显示了我上面的建议。

  <%-- For every String[] item of paramValues... --%>
  <c:forEach var='parameter' items='${paramValues}'> 
     <ul>
        <%-- Show the key, which is the request parameter
             name --%>
        <li><b><c:out value='${parameter.key}'/></b>:</li>

        <%-- Iterate over the values -- a String[] -- 
             associated with this request parameter --%>
        <c:forEach var='value' items='${parameter.value}'>
           <%-- Show the String value --%>
           <c:out value='${value}'/>   
        </c:forEach>
     </ul>
  </c:forEach>

答案 2 :(得分:0)

将参数传递给jsp jstl:

/* JSP PARENT */

<jsp:include page="../../templates/options.jsp">                    
    <jsp:param name="action" value="${myValue}"/>       
</jsp:include>


/* JSP CHILD (options.jsp)*/

<div id="optionButtons left">       
    <span>${param.action}</span>
</div>

答案 3 :(得分:0)

由于表单中的字段名称不相同,因此您无法使用&#39; forEach&#39;标签。我认为这会奏效!

First Name:${param.fname}
Last Name:${param.lname}