Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

วิธีตั้งค่าผลลัพธ์ Java Expression ให้ Property ใน JSP ด้วย <c:set>

Tag <c:set> (JSTL Core) ตั้งค่า property ของ JavaBean หรือ java.util.Map หรือสร้าง variable ใหม่ ใน scope ที่กำหนด

Attributes

AttributeคำอธิบายRequiredDefault
valueค่าที่จะตั้ง (EL expression)NoBody content
targetTarget object (JavaBean หรือ Map)No-
propertyProperty name ของ targetNo-
varVariable name สำหรับเก็บค่า (ถ้าไม่มี target)No-
scopeScope ของ var: page, request, session, applicationNopage

โหมดการทำงาน 2 แบบ

1. สร้าง/ตั้งค่า Variable (ไม่มี target)

<c:set var="salary" scope="session" value="${2000 * 2}"/>
<c:out value="${salary}"/>  <-- 4000 -->

2. ตั้งค่า Property ของ Bean/Map (มี target และ property)

<!-- JavaBean -->
<c:set target="${user}" property="name" value="Somchai"/>

<!-- java.util.Map -->
<c:set target="${myMap}" property="key1" value="value1"/>

ตัวอย่างสมบูรณ์

<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<html>
<body>
    <!-- Mode 1: Variable -->
    <c:set var="counter" scope="page" value="${0}"/>
    <c:set var="counter" value="${counter + 1}"/>
    Counter: <c:out value="${counter}"/>  <-- 1 -->
    
    <hr/>
    
    <!-- Mode 2: Bean Property -->
    <jsp:useBean id="user" class="com.example.User" scope="session"/>
    <c:set target="${user}" property="email" value="somchai@example.com"/>
    Email: <c:out value="${user.email}"/>
</body>
</html>

กฎสำคัญ

  • ถ้ามี target ต้องมี property ด้วย
  • target ต้องมี setter method (setProperty()) หรือเป็น Map
  • value ไม่ระบุ → ใช้ body content แทน
  • EL expressions ใน value รองรับ operators, functions, implicit objects

เปรียบเทียบ <c:set> vs <jsp:setProperty>

แนะนำ: ใช้ <c:set> แทน <jsp:setProperty> เพื่อความสม่ำเสมอกับ JSTL/EL

คุณสมบัติ<c:set><jsp:setProperty>
TargetBean, Map, VariableBean only
Value sourceEL expression (ยืดหยุ่น)param, value, property
Scope controlvar + scope attributeBean scope only
Null/Empty handlingEL handles gracefullyLimited