私の現在の春のプロジェクトでは、私のエンティティ クラスからの属性には、次のように、データ入力にどのタイプのフォーム コントロールを使用する必要があるかを示す注釈があります。
@Column(name = "login", unique=true)
@Order(value=1)
@Input(name="login")
private String login;
@Column(name = "senha")
@Order(value=2)
@Input(type="password", name="senha")
private String senha;
@Column(name="nome")
@Order(value=3)
@Input(name="nome")
private String nome;
@Column(name="sobrenome")
@Order(value=4)
@Input(name="sobrenome")
private String sobrenome;
@Column(name="email")
@Order(value=5)
@Input(name="email")
private String email;
そして、注釈の属性を読み取り、次のように正しいタグをページに追加するカスタムタグがあります。
public class InputTag extends TagSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
public void doTag() throws IOException, NoSuchFieldException, SecurityException {
JspWriter out = pageContext.getOut();
String name = this.getName();
String type = this.getType();
String pattern = this.getPattern();
if(type == null) {
if(pattern == "") {
out.println("<form:input path=\""+name+"\" class=\"form-control\"/>");
} else {
out.println("<form:input path=\""+name+"\" class=\"form-control valida\" pattern=\""+pattern+"\"/>");
}
} else {
if(pattern == "") {
out.println("<form:input path=\""+name+"\" type=\""+type+"\" class=\"form-control\"/>");
} else {
out.println("<form:input path=\""+name+"\" type=\""+type+"\" class=\"form-control valida\" pattern=\""+pattern+"\"/>");
}
}
}
...
}
タグ クラスの getter メソッドの形式は次のとおりです。
private String getName() throws NoSuchFieldException, SecurityException {
Field field = null;
Annotation annotation = field.getAnnotation(Input.class);
Input inputAnnotation = (Input) annotation;
String name = inputAnnotation.name();
return name;
}
今必要なのは、field
ページに追加したいフィールドを変数に格納する方法です。エンティティ クラス (のようなもの) 内にいる場合にこれを行う方法は知っていますgetClass().getField("<nome>")
が、タグ クラスからこの情報にアクセスするにはどうすればよいでしょうか?
ビューは私のコントローラーでこのようにマップされます:
@RequestMapping(value="cadastra")
@PreAuthorize("hasPermission(#user, 'cadastra_'+#this.this.name)")
public String cadastra(Model model) throws InstantiationException, IllegalAccessException {
model.addAttribute("command", this.entity.newInstance());
return "private/cadastrar";
}
この瞬間のjspコードはこれです(基本構造のみ):
<c:url value="/${entity}/cadastra" var="cadastra"/>
<form:form method="POST" action="${cadastra}" class="form" enctype="multipart/form-data">
<button type="submit" class="btn btn-lg btn-primary">cadastrar</button>
</form:form>
誰でもこれを達成する方法を知っていますか?