루프문에 약간의 처리를 넣는 경우 같이 스크립트를 기술하고 싶은 경우 exec프로세서를 사용한다. 속성으로는 Javascript파일의 위치를 지정하는 src속성과 ${}에 직접 기술하는 script속성이 있다.
간단한 예아래의 예는 exec프로세서를 사용해서 루프변수가 짝수인지 홀수인지를 판단해서 evenodd라는 변수에 저장한 후 출력한다.
exec.html <html>
<body>
<div id="loop">
<div id="evenodd"><span id="value">dummy</span></div>
</div>
</body>
</html>
exec.mayaa <?xml version="1.0" encoding="UTF-8"?>
<m:mayaa xmlns:m="http://mayaa.seasar.org">
<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 }" />
</m:mayaa>
변수evenodd는exec프로세서내에서만 유효하다. id="value"의 span태그는 exec프로세서의 body이기 때문에 evenodd변수를 참조가능한 범위에 있다.
실행결과
<html>
<body>
<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>
</body>
</html>
간단한 활용법이라면 request에 들어있는 object에 접근하기 위해서 object.getProperty().getChildre()[1].getValue()등과 같이 아주 긴 기술(oject.property.children[1].value다고 해도 긴 표기가 된다)이 되는 경우가 많은데 var child=object.property.children[1]과 같이 미리 선언해 두고 child.value등 과 같이 짧게 기술하는 것을 가능하게 하는 경우가 있겠다.
|