DynamicValidator
以前DynamicValidatorで動的に必須チェックがかけられると書きましたが、少々訂正が必要なようです。
hoge.html
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:te="http://www.seasar.org/teeda/extension" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <form id="hoge" method="post"> <span id="allMessages"></span> <input type="text" id="aaa"/> <span id="bbb"> <input type="radio" name="bbb" value="0" checked="checked"/>aaa </span> <input type="submit" id="doCcc"/> </form> </body> </html>
hogePage.java
public class HogePage { private String aaa; private String bbb; private List bbbItems; public Validator getAaaValidator() { if (bbb != null && bbb.equals("1")) { ValidatorChain chain = new ValidatorChain(); chain.add(new TRequiredValidator()); return chain; } else { return null; } } public String getAaa() { return aaa; } public void setAaa(String aaa) { this.aaa = aaa; } public String getBbb() { return bbb; } public void setBbb(String bbb) { this.bbb = bbb; } public List getBbbItems() { return bbbItems; } public void setBbbItems(List bbbItems) { this.bbbItems = bbbItems; } public Class doCcc() { return null; } public Class initialize() { return null; } public Class prerender() { bbbItems = new ArrayList(); Map map = new HashMap(); map.put("value", "0"); map.put("label", "選択肢1"); bbbItems.add(map); map = new HashMap(); map.put("value", "1"); map.put("label", "選択肢2"); bbbItems.add(map); return null; } }
上記のような画面を作成した場合、選択肢2を選んだときだけaaaに必須チェックがかかります。
しかし前回のshot6さんのコメントにある通りformのidをformで終わらせるように変更すると
<form id="hoge" method="post"> ↓ <form id="hogeForm">
選択肢2を選んでも必須チェックがかからなくなります。
もう少し具体的に言うとgetAaaValidatorメソッドが呼ばれる時点ではbbbが(というか他のプロパティも)nullです。
値が取れるようにしてみようと思いましたが力及ばず・・・