HTML
リソース[/WEB-INF/html/tutorial4.html]
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns:java="http://hoeppe.the-ninja.jp/">
<body>
<div>Item List</div>
<div java:canvas="list">
<div java:group="fragment">
<div>Item</div>
<div java:key="index"></div>
<div java:key="name"></div>
</div>
</div>
</body>
</html>
Java
package org.ruler.markup.tutorial;
import org.ruler.markup.api.Canvas;
import org.ruler.markup.api.Group;
import org.ruler.markup.api.Http;
import org.ruler.markup.api.Mount;
import org.ruler.markup.api.Node;
import org.ruler.markup.api.Page;
import org.ruler.markup.api.Source;
@Mount(path="/tutorial4.html")
@Source(file="/WEB-INF/html/tutorial4.html")
public class Tutorial4 extends Page {
//@Source(id="fragment") // if class field name is not same HTML id.
@Source
Group fragment = new Group();
//@Source(id="list") // if class field name is not same HTML id.
@Source
Canvas list = (node) -> {
String[] names = {
"A", "B", "C", "D", "E"
};
int loop = 5;
for(int i=0; i<loop; i++){
Node copy = new Node(fragment);
copy.in(node);
Node name = copy.key("name");
name.text(names[i]);
Node index = copy.key("index");
index.text("index("+i+")");
}
};
@Override
public void action(Http http) {
http.GET = (e) -> {
draw(e);
};
}
}
実行
出力[結果]
<?xml version="1.0" encoding="UTF-8"?>
<html>
<body>
<div>Item List</div>
<div java:canvas="list">
<div java:group="fragment">
<div>Item</div>
<div java:key="index">index(0)</div>
<div java:key="name">A</div>
</div>
<div java:group="fragment">
<div>Item</div>
<div java:key="index">index(1)</div>
<div java:key="name">B</div>
</div>
<div java:group="fragment">
<div>Item</div>
<div java:key="index">index(2)</div>
<div java:key="name">C</div>
</div>
<div java:group="fragment">
<div>Item</div>
<div java:key="index">index(3)</div>
<div java:key="name">D</div>
</div>
<div java:group="fragment">
<div>Item</div>
<div java:key="index">index(4)</div>
<div java:key="name">E</div>
</div>
</div>
<body>
</html>
説明
繰り返し処理を行うさいに、単位としての固まりをGroupクラスによって行います。
Groupクラスのフィールドに添付されたアノテーション@Source(id="xxx")と、
HTMLの属性(id)が一致するXML/HTMLタグがバインドされます。
new Node(Group group)によってコピーされたNodeインスタンスが生成されます。