<jsp:setProperty>標記只能用來做一件事,那就是設置bean的性質。
但是,如果你想設置一個Map中的值呢?或者說想在Map中創建新的一項呢?或者只是希望創建一個新的請求作用域屬性,該腫么辦呢?
好吧,那就要用到c:set來幫忙了。
c:set有兩種不同的設置:var和target。var版本用於設置屬性變量,target版本用於設置bean性質或Map值。這兩種版本都有兩種形式,有體和沒體,其實只是講值放在不同位置的書寫方式而已,不必糾結。下面首先介紹var版本,設置屬性變量:
<!--設置屬性的值,關鍵字set,var--> <html> <body> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <% pageContext.setAttribute("name","wang"); %> name: <%= pageContext.getAttribute("name") %><br> <!--設置該屬性的值--> <c:set var="name" value="ning" /> after change: <c:out value="${name}" default="it's nothing" /><br> <!--設置的屬性不存在,則創建該屬性--> <c:set var="dog" scope="page" value="wangcai" /> dog: <c:out value="${dog}" default="it's nothing" /> </body> </html>
上面的代碼已經很清晰了,所以就不多啰嗦了。因為上面用到的都是沒體的形式,所以這里寫一下有體的書寫形式,做一下對比。
兩種效果相同。
<!--有體--> <c:set var="dog" scope="page" value="wangcai" /> <!--沒體--> <c:set var="dog" scope="page" > wangcai </c:set>
下面講一下設置bean性質
<!--設置bean性質,關鍵字set,target--> <html> <body> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <% foo.person person = new foo.person(); %> <% pageContext.setAttribute("person",person);%> set bean<br> <c:set target="${person}" property="name" value="bigMan" /> personName: <c:out value="${person.name}" /><br> </body> </html>
person.java
package foo; public class person{ private String name; public void setName(String name){ this.name = name; } public String getName(){ return name; } }
ok,上面的代碼都很簡單。到此c:set的簡單的用法就介紹完了。