私は春を使用しており、オブジェクト化キーオブジェクトを持つ子モデルを持っています - 「キー親」
フォームがロードされているときは getAsText は正常に出力されますが、フォームが送信されると setAsText はスキップされます。何らかの理由?コントローラーに到着したとき、parentType は空です。フォームの問題ですか、それともコントローラーですか、それとも編集者ですか?
(余談: Objectify Key <-> String マッピング用に作成されたエディターはありますか?)
JSP
<form:hidden path="parentType" />
コントローラ
@InitBinder
protected void initBinder(HttpServletRequest request,
ServletRequestDataBinder binder) throws Exception {
/** Key Conversion **/
binder.registerCustomEditor(com.googlecode.objectify.Key.class, new KeyEditor());
}
@RequestMapping(value = "/subtype-formsubmit", method = RequestMethod.POST)
public ModelAndView subTypeFormSubmit(@ModelAttribute("productSubType") @Valid ProductSubType productSubType,
BindingResult result){
ModelAndView mav = new ModelAndView();
//OK, getting the value
log.info(productSubType.getType());
//NOT OK, productSubType.getParentType() always null, and setAsText is not called?!
log.info(productSubType.getParentType().toString());
return mav;
}
KeyEditor.java
public class KeyEditor extends PropertyEditorSupport {
private static final Logger log = Logger
.getLogger(KeyEditor.class.getName());
public KeyEditor(){
super();
}
@Override
public String getAsText() {
Long id = ((Key) getValue()).getId();
String kind = ((Key) getValue()).getKind();
log.info(kind + "." + id.toString());
return kind + "." + id.toString();
}
@Override
public void setAsText(String text) throws IllegalArgumentException {
log.info(text);
String clazz = text.substring(0, text.indexOf("."));
Long id = Long.parseLong(text.substring(text.indexOf(".")));
log.info(clazz+":"+id);
Class c=null;
Key<?> key=null;
try {
c = Class.forName(clazz);
key = new Key(c, id);
} catch (Exception ex) {
log.info("ex" + ex.toString());
ex.printStackTrace();
}
setValue(key);
}
}