这是我的第一页
<%@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'。<登记/> 我不知道为什么它不起作用。
答案 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}