1
Struts 筆記
2
2008 08 15
3
當你使用struts 2 tags時,如果使用代碼:
4
<s:set name="name" value="<%= "'" + request.getParameter("name") + "'" %>" />
5
或者
6
7
<s:set name="name"value="${param.name}" />
8
都會發生下列錯誤:
9
According to TLD or attribute directive in tag file, attributevalue does not accept any expressions
10
而得使用:
11
<s:set name="name" value="#parameters.name[0]" />
12
才行
13
原因可能是因為你使用了<%..%>代碼 or JSP EL表達式。Struts 2從 version2.0.11開始已經不支持strutstag與JSP EL表達式混合使用了(不在struts tag里使用EL還是可以的)
14
15
16
技巧(Trick Tip):
17
對于<s:property>,是使用
18
<s:property value="#parameters.name"/>
19
而對于<s:set>,則要使用(否則出錯):
20
<s:set name="name" value="#parameters.name[0]" />
21
22
但是如果使用struts include tag來傳參數,則<s:property>和<s:set>無法獲取傳來的參數,如:
23
<body>
24
<s:include value= "/welcome.jsp">
25
<s:param name="name">Scott</s:param>
26
</s:include>
27
</body>
28
那么在webcome.jsp里通過<s:property>和<s:set>無法獲取"name"參數:
29
<s:property value="#parameters.name" />
30
<s:set name="name"value="#parameters.name[0]" />
31
而只能夠用
32
<%request.getParameter("name")%>
33
來獲取
34
35
例如:
36
<%@ page contentType="text/html; charset=UTF-8"%>
37
<%@ taglib prefix="s" uri="/struts-tags"%>
38
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
39
<html>
40
<head>
41
<title>Condition Flow</title>
42
</head>
43
<body>
44
<h3>
45
Condition Flow
46
</h3>
47
48
<!-- 注意"'" + request.getParameter("name") + "'"這里的單引號 -->
49
<!-- s:if test="#name == 'Max'" 判斷取出name的值是否與Max相等,#表示取出值 -->
50
<s:set name="name"
51
value="#parameters.name[0]" />
52
53
<s:if test="#name == 'Max'">
54
Max's file here
55
</s:if>
56
<s:elseif test="#name == 'Scott'">
57
Scott's file here
58
</s:elseif>
59
<s:else>
60
Other's file here
61
</s:else>
62
</body>
63
</html>
64
<!--
65
這里有點小技巧:
66
本來可以用#parameters.name[0]來獲得,請求中name的值。但是,在我實現include例子時,
67
無論我用param標志給name賦任何值,#parameters里面不會含有任何值,所以#parameters.name也為空值。
68
69
其原因為:
70
當使用include標志時,被包含的頁面(included)里#parameters拿到的是包含頁面里的請求參數。
71
72
因此,這里必須手工調用request.getParameter("name")。
73
-->
74

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74
