Logic Tags

语法应用是 --
<someComparisonTag value="someUserNameValue" cookie="userName"> (cookie specifies the name of the cookie to compare with value)
<someComparisonTag value="en_US" header="Accept-Language"> (header specifies the name of the HTTP header to compare with value)
<someComparisonTag value="someUserNameValue" parameter="username"> (parameter specifies the name of the request parameter to compare with value)

<someComparisonTag name="testBean" property="propNameInTestBean" value="someValue"> (典型)
name指定了bean的名字而property指定了该bean的某个property以便于和value比较, 通常我们还能够加一个scope来限制bean
property is used in conjunction with name to specify a property in the bean specified by name. The property reference can be simple, nested, and/or indexed. For the type of syntax used for property, see the users guide on the Bean Tags.
scope specifies the bean scope which can be page, request, session, application, "any scope" (default)

1) 值比较 Value Comparison: equal, notEqual, greaterEqual, lessEqual, lessThan, greaterThan
比较逻辑是 -- 先试图convert成long double,并比较; 假如parse失败就会用String.equalTo()来比较

1) 值比较 Value Comparison: present, notPresent, empty, notEmpty
present看的是某变量/实例是否存在于某个限定范围,empty看的是该实例是否为null, "", or collection.isEmpty()==true (only for collection)

2) 子字符串匹配 Substring Matching: match, notMatch
match/notMatch 更有一个可选location来指定该substring必须出现在字符串开始还是结尾 (location="start/end")

3) Presentation Location: forward, redirect
用法尚不清楚

4) Collection Utilities: iterate (极常用)
<logic:iterate id="searchResultList" name="<%=WebKeys.SEARCH_RESULT_LIST_TWO%>" scope="session">
<bean:write name="searchResultList" property="itemName"/></a>
<bean:write name="searchResultList" property="itemUnitOfMeasure" />
<bean:write name="searchResultList" property="inventoryDetailSize" format="#0.00"/>
</logic:iterate>
假如property给定,name代表了一个bean的实例,而这个bean的getThatProperty()将返回此tag需要的collection实例,
假如没有给定property, name本身就指定了将被iterate的collection的实例,
id给出了每一次循环的collection的当前object的名字,用于在内部使用
offset和length指定了从collection的哪个位置开始,到哪里结束,其他请参见Struts Documentation,这里不详述