// @InitBinder
// public void initBinder(WebDataBinder b) {
// b.registerCustomEditor(List.class, "groupList", groupListEditor);
// }
// public void initBinder(WebDataBinder b) {
// b.registerCustomEditor(List.class, "groupList", groupListEditor);
// }
就放这点代码,真让人猜不着摸不透啊!
好吧,演示一下自定义注解的使用:
package com.org.mvc.model;import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/**
* 在action中注解注入modelBean
* @version 1.0
*/
@Target(ElementType.FIELD)// 只能在字段中注解
@Retention(RetentionPolicy.RUNTIME)// 必须是运行时有效
@Documented
public @interface MatchingBean {}// 在action中注解注入modelBean(这部分只是片段代码)
private void matching(Field[] fields, Object object) throws Exception {
for (int i = 0; i < fields.length; i++) {
if (null != fields[i].getAnnotation(MatchingBean.class)) {//说明这个字段使用了自定义注解
fields[i].set(object, Settled.MODEL_BEAN_MAP.get(fields[i].getName()).getObject());//给字段赋值(俗称注入)
}
}
}
package com.zl.web;import com.org.mvc.model.MatchingBean;
import com.org.mvc.web.BaseAction;
import com.zl.biz.UserBiz;
import com.zl.entity.User;/**
* 用户(员工)的action
* @version 1.0
*/
public class UserAction extends BaseAction {
/**
* 系统主页面
* @return String
*/
public String main() {
System.out.println(userBiz);// 看看注入是否成功,结果输出:com.zl.biz.impl.UserBizImpl的一个实例
setSessionAttr("width", paramInt("width"));
setSessionAttr("height", paramInt("height"));
return "main";
}
public String list() {
System.out.println(bean.getName());// 封装页面提交的数据(已经封装在private User bean;中)
return "list";
}
public String edit() {
downLoadFile("/index.jsp", "index.jsp");// 下载文件
return null;
}
public String file() {
uploadFile("/upload/", new String[]{ "1.jpg", "2.jpg" });// 上传文件
return null;
}
@MatchingBean
public UserBiz userBiz;//UserBiz是个业务层接口,这里用自己的注解方式给这个bean注入(不依赖spring),在运行的时候userBiz确实就是实现类的一个实例
private User bean; public User getBean() {
return bean;
} public void setBean(User bean) {
this.bean = bean;
}}