2014-03-26 22 views
0

這是我的第一頁paramValues在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'。
我不知道爲什麼它不起作用。

回答

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的用途。

+0

我知道,我已經做到了這一點使用param.fname但現在我想做到這一點使用paramValues因此,如果能幫助我使用paramValues我會更感激acheiving相同的輸出。 – TruePS

+0

這基本上就像是想用螺絲刀打釘子。但'paramValues.fname [0]'應該工作。 –

+0

它不工作。 – TruePS

1

JB Nizet正確。

假設在'第一頁'中'fname'被設置爲'George','lname'被設置爲'Smith'。

'paramValues'是一個HashMap,所以當你在'forEach'中使用它時,你在'value'中得到的是Map.Entry,Map.Entry沒有'fname'字段,所以有沒有用於JSP調用的'getFname'方法。分別

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

如果你堅持, '價值' 可以作爲 '$ {} value.key' 和 '$ {} value.value',但是,將讓你的對。我懷疑這就是你想要的。使用'forEach'的唯一原因是,如果您期待多個答案並需要遍歷所有答案。這不是作爲例子給出的。

以下內容從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> 
+1

TruePS讓我看看這個。 – EdwinW

+0

我完全理解你在說什麼,但我只想得到一個paramvalues的例子。應該有一些方法讓George Smith使用paramvalues。 – TruePS

+0

@TruePS好吧,因爲我沒有一個方便測試的JSP站點,所以我不知道這是否可行,但是您可以嘗試對$ {paramValues.values}的結果使用'forEach'。 HashMap的'values'方法返回一個集合,所以'forEach'應該對它感到滿意。問題是,我不確定JSP是要調用HashMap的'values'方法還是去尋找'getValues'方法。如果是後者,這是行不通的。另外,不能保證你獲得價值的順序。它可以像喬治史密斯那樣容易地成爲史密斯喬治。 – EdwinW

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> 
0

因爲在你的表單中的字段沒有被命名一樣,你不能使用「的forEach」標籤。我認爲這會起作用!

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