Spring mvc学習で出会った問題と解決方法
6849 ワード
1.フレームワーク構築方面
sshの構築などの開発環境の手順とほぼ一致し、追加の注意は必要ありません.struts 2はfilterによってすべてのクライアントの要求をブロックします.spring mvcは自動的にロードされたservletによってブロックします.注意しなければならない点はstruts 2がすべての要求をブロックします.書き方は以下の通りです.
Spring mvcは、次のように要求をブロック/ブロックするように構成されています.
2.フロントから提出されたデータをどのように受信しますか?
Spring mvcとstruts 2の最大の違いはここで、struts 2のactionメソッドはすべてパラメータがなくて、受信クライアントが提出したデータは一般的にactionクラスで実体クラスのインスタンスを定義する方式で実現して、spring mvcは主にactionメソッドのパラメータを定義することによって受信して、このstruts 2の開発をするプログラマーは本当に適応する必要があります.覚えておいてください.クライアントからコミットされたものを取り、メソッドパラメータを定義して取得します!
具体的にはどのように受け取りますか?次のエンティティークラスがあるとします.
フロントの入力画面hello.jspキーコードは次のとおりです.
Spring mvcで受信したコードは次のとおりです.
上のコードはTMDの1つの字がすべて問題があることができて、中のいくつかの重点:
1.BindingResultパラメータの前に@ModelAttributeで修飾されたパラメータが必要です.一般的にはエンティティクラスです.また、必ず名前を付けなければなりません.この名前は必ずフロントの
Springの構成パラメータファイルでの国際化リソースファイルのロードの定義
そしてメッセージを書きます.propertiesファイル、内容は以下の通りです.
それからインタフェースの上で出力spring mvcのタイプを使ってエラーメッセージを変換する時やっときれいで、さもなくばたくさんのE文のヒントで、これは2日間振り回してやっとどのように解決するかを知っています.
また、Dateタイプのような書き込みタイプ変換器を書く必要があります.コードは次のとおりです.
intタイプの
全体的な感じSpring MVCはやはりとても简単で、上手なのは比较的に速くて、いくつかの低級な点の问题を讨论する人がいなくて、问题に出会ってどのように解决するかを探しにくいです.
sshの構築などの開発環境の手順とほぼ一致し、追加の注意は必要ありません.struts 2はfilterによってすべてのクライアントの要求をブロックします.spring mvcは自動的にロードされたservletによってブロックします.注意しなければならない点はstruts 2がすべての要求をブロックします.書き方は以下の通りです.
struts2
/*
Spring mvcは、次のように要求をブロック/ブロックするように構成されています.
spring3
/
2.フロントから提出されたデータをどのように受信しますか?
Spring mvcとstruts 2の最大の違いはここで、struts 2のactionメソッドはすべてパラメータがなくて、受信クライアントが提出したデータは一般的にactionクラスで実体クラスのインスタンスを定義する方式で実現して、spring mvcは主にactionメソッドのパラメータを定義することによって受信して、このstruts 2の開発をするプログラマーは本当に適応する必要があります.覚えておいてください.クライアントからコミットされたものを取り、メソッドパラメータを定義して取得します!
具体的にはどのように受け取りますか?次のエンティティークラスがあるとします.
package com.shinowit.web;
import java.io.Serializable;
import java.util.Date;
public class UserInfo implements Serializable{
private static final long serialVersionUID = 1L;
private String userName;
private String userPass;
private int age;
private Date birthday;
private float price;
private byte status;
private boolean valid;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPass() {
return userPass;
}
public void setUserPass(String userPass) {
this.userPass = userPass;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public byte getStatus() {
return status;
}
public void setStatus(byte status) {
this.status = status;
}
public boolean isValid() {
return valid;
}
public void setValid(boolean valid) {
this.valid = valid;
}
}
フロントの入力画面hello.jspキーコードは次のとおりです.
Spring mvcで受信したコードは次のとおりです.
@RequestMapping(value="hello1",method=RequestMethod.POST)
public ModelAndView saveHello(@ModelAttribute("user") UserInfo user,BindingResult bindingResult){
ModelAndView result=new ModelAndView("hello");
if (bindingResult.hasErrors()==false){
if (user.getAge()<10){
bindingResult.rejectValue("age", ""," !");
}
}
return result;
}
上のコードはTMDの1つの字がすべて問題があることができて、中のいくつかの重点:
1.BindingResultパラメータの前に@ModelAttributeで修飾されたパラメータが必要です.一般的にはエンティティクラスです.また、必ず名前を付けなければなりません.この名前は必ずフロントの
这里面的modelAttribute名称一样。
2.前台的
タイプ変換エラーがある場合、intタイプのageユーザーが文字列を誤って入力した場合、グローバルな国際化リソースファイルを定義して、次のようにする必要があります.Springの構成パラメータファイルでの国際化リソースファイルのロードの定義
そしてメッセージを書きます.propertiesファイル、内容は以下の通りです.
typeMismatch.java.util.Date={0} \u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u65E5\u671F.
typeMismatch.int={0} \u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u6570\u5B57.
それからインタフェースの上で出力spring mvcのタイプを使ってエラーメッセージを変換する時やっときれいで、さもなくばたくさんのE文のヒントで、これは2日間振り回してやっとどのように解決するかを知っています.
また、Dateタイプのような書き込みタイプ変換器を書く必要があります.コードは次のとおりです.
package com.shinowit.util;
import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.springframework.util.StringUtils;
public class DateConvertEditor extends PropertyEditorSupport {
private SimpleDateFormat datetimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
public void setAsText(String text) throws IllegalArgumentException {
if (StringUtils.hasText(text)) {
try {
if (text.indexOf(":") == -1 && text.length() == 10) {
setValue(this.dateFormat.parse(text));
} else if (text.indexOf(":") > 0 && text.length() == 19) {
setValue(this.datetimeFormat.parse(text));
}else{
throw new IllegalArgumentException("Could not parse date, date format is error ");
}
} catch (ParseException ex) {
IllegalArgumentException iae = new IllegalArgumentException("Could not parse date: " + ex.getMessage());
iae.initCause(ex);
throw iae;
}
} else {
setValue(null);
}
}
public String getAsText() {
if (getValue() instanceof java.util.Date) {
try{
Calendar cal=Calendar.getInstance();
Date dateValue=(Date)getValue();
cal.setTimeInMillis(dateValue.getTime());
if ((0==cal.get(Calendar.HOUR_OF_DAY)) && (0==cal.get(Calendar.MINUTE)) && (0==cal.get(Calendar.SECOND))){
return dateFormat.format(dateValue);
}else{
return datetimeFormat.format(dateValue);
}
}catch(Exception e){
e.printStackTrace();
}
}
return "";
}
}
intタイプの
package com.shinowit.util;
import java.beans.PropertyEditorSupport;
import org.springframework.util.StringUtils;
public class IntConvertEditor extends PropertyEditorSupport {
public void setAsText(String text) throws IllegalArgumentException {
if (StringUtils.hasText(text)) {
try {
setValue(Integer.parseInt(text));
} catch (Exception ex) {
IllegalArgumentException iae = new IllegalArgumentException("Could not parse int data,message: " + ex.getMessage());
iae.initCause(ex);
throw iae;
}
} else {
setValue(0);
//setValue(null);
}
}
public String getAsText(){
if (getValue() instanceof java.lang.Integer) {
Integer value=(Integer)getValue();
return value.toString();
}
return "";
}
}
全体的な感じSpring MVCはやはりとても简単で、上手なのは比较的に速くて、いくつかの低級な点の问题を讨论する人がいなくて、问题に出会ってどのように解决するかを探しにくいです.