1.6、 for: 循环处理
(为避免死循环,上限为256次)
init:初始化
test:判定条件,为true的时候执行,为false的时候就终止
after:每次执行后的处理
max:循环上限(最大256)
/m:for和java中的for语句起到的作用是一样的,mayaa中的m:for只在最初运行init一次,也就是初始化。然后判断test的值是否为true,如果为true就执行m:for的body体的代码,最后执行after,执行after之后又开始执行test,执行循环,为了让 < br > 输出到模板后执行,所以指定 escapeXml=false
//for.html
<html>
<body>
<span id="loop">
<span id="message">dummy message</span>
</span>
</body>
</html>
//for.mayaa
<?xml version="1.0" encoding="UTF-8"?>
<m:mayaa xmlns:m="http://mayaa.seasar.org">
<m:for m:id="loop"
init="${ var i = 0 }"
test="${ i < 5 }"
after="${ i++ }" />
<m:write m:id="message" value="Hello Mayaa!<br>" escapeXml="false" />
<m:write m:id="message" value="${i}! <br>>" escapeXml="false" />
//也同时可以输出i
</m:mayaa>
//显示页面
<html>
<body>
Hello Mayaa!<br>
Hello Mayaa!<br>
Hello Mayaa!<br>
Hello Mayaa!<br>
Hello Mayaa!<br>
</body>
</html>
1.7、 forEach (常用)
forEach和for作用一样,但在处理java固有集合类对象比for使用,且for是有上限的,forEach把循环处理都隐藏起来了。
涉及参数 items:要循环的对象,var:每次循环的对象,index:循环次数
拿list为例,如果在java中list放入的是java.lang.Number类型或者子类(long类),那么mayaa取出处理后就不是对象了,成了long数据类型。
// for.html
<html>
<body>
<span id="loop">
<span id="message">dummy message</span>
</span>
</body>
</html>
// for.mayaa
<?xml version="1.0" encoding="UTF-8"?>
<m:mayaa xmlns:m="http://mayaa.seasar.org">
<m:forEach m:id="loop"
items="${bean.periodBeanList}"
var="currentData"
index="dataIndex"
/>
<m:write m:id="message" value="Hello Mayaa!<br>" escapeXml="false" />
</m:mayaa>
// 显示页面
<html>
<body>
Hello Mayaa!<br>
Hello Mayaa!<br>
Hello Mayaa!<br>
Hello Mayaa!<br>
Hello Mayaa!<br>
</body>
</html>
1.8、 attribute: 增加属性 (常用)
一般用作echo内的属性设置,当value指定为null(非value="")则删除该元素的属性。
name:要追加的属性名
value:要追加属性名的值,null的场合就是删除该属性
// xx.html
<html>
<body>
<input type="text" value="dd" name="aa" id="button1" size="11"/>
</body>
</html>
// xx.mayaa
<?xml version="1.0" encoding="UTF-8"?>
<m:mayaa xmlns:m=http://mayaa.seasar.org>
<m:echo m:id="button1">
<m:attribute name="type" value="button"/> //此处会替换xx.html中input的type属性的值
<m:attribute name="value" value="逃之夭夭灼灼其华"/>
<m:attribute name="size" value="${null}"/> //此处会删除xx.html中input的size属性
<m:attribute name="value" value="${getValue().toStr()}"/> //如果需要js方法,需要${js方法}这样操作,如果需要变量也如此操作
</m:echo>
</m:mayaa>
// 执行结果
<html>
<body>
<input type="button" value="dd" name="逃之夭夭灼灼其华" id="button1"/>
</body>
</html>
// 另外在echo中如果要获取元素的属性值,可通过name="属性名" value=" ${属性名}"获取
例子:
// xx.html
<input id="ipt" value="3" />
// xx.mayaa
<m:echo m:id="ipt">
<m:attribute name="value" value="${new Number(value) + 2}"/> // 由于属性的值都是字符串,需要转Number类型进行加法计算
</m:echo>
// 执行结果
<input id="ipt" value="5"/>
1.9、 exec: 使用脚本
exec用于脚本执行,附带属性script(执行的js,写在${})和src(js路径,相对路径,绝对路径)都存在的情况,src优先。
script:实行的js,卸载${ }内
src:js路径,相对路径,绝对路径
encoding:对src属性指定文件时的编码 (file.encoding UTF-8)
// xx.html
<div id="loop">
<div id="evenodd">
<span id="value">11</span>
</div>
</div>
// xx.mayaa
<m:for m:id="loop" init="${var i = 1}" test="${i < 6}" after="${i+=1}"/>
<m:exec m:id="evenodd" replace="false" script="${var evenodd = (i % 2 == 0)? 'even': 'odd';}"/>
<m:write m:id="value" value="${i+':'+evenodd}"/>
// 执行结果
<div id="evenodd">1:odd</div>
<div id="evenodd">2:even</div>
<div id="evenodd">3:odd</div>
<div id="evenodd">4:even</div>
<div id="evenodd">5:odd</div>
仅仅从这个简单的例了,也许看不出什么来。
但是当用变量定义数组的元素和计算结果等的时候,就能使文件变得易于理解清晰。假设要访问一个放在request深层的对象,object.getPropertY().getChildren()[1].getValue(),如果采用javascript来做:object.property.children[1].value 即可以定位到所需元素,不过这样比较长,可能也不易于理解,这个时候可以定义一个变量:
var chi1d = object.property.children[l],
然后通过child.value、child.name便可以清晰方便的访问元素了。
1.10、echo (常用)
/m:echo配合m:attribute或m:if一起使用,来选择m:id
echo processor
被指定那部分标记原样输出, m:echo的body体内写 attribute processor的话,意思就是追加一个属性,或者修正属性,删除属性。 Echo processor的属性以及其body体可以通过脚本访问模板中的属性值。把模板中的属性名作为变量名,把模板中的属性值作为字符串访问。例如在<a/>标记中,通过echo访问的时候,${href}就是要取属性href得值
通常通过置换标记和body体或只置换body体来动态生成画面,可是有时候根据不同情況只需要置换模板上的一部分标记属性就可以了,这种情况要用到echo
给出例子说明cho的具体用法。
下面的例子中l标记的type属性的值从原来的A换成了i,stat属性没有改变原样输出。
//xx.html
<ol id="list" type="A" start="3">
<li>item 1</li>
<li>item 2</li>
</ol>
//xx.mayaa
<m:echo m:id="list"/>
<m:attribute name="type" value='i'>
<m:echo/>
//m:echo 与模板中ol标记对应,而m:attribute作为m:echo的子procssor被使用,对type属性,改变其属性值为i,如果要改变多个属性,那么可以用多个m:attribute。执行结果
//执行结果
<ol id="list" type="i" start="3">
<li>item 1</li>
<li>item 2</li>
</ol>