Java spring mvc中的自定义字段访问器,而不是BeanRapper
我在视图中设置了一个基本的spring boot web mvc应用程序,其表达式如下:Java spring mvc中的自定义字段访问器,而不是BeanRapper,java,spring,spring-mvc,Java,Spring,Spring Mvc,我在视图中设置了一个基本的spring boot web mvc应用程序,其表达式如下: ${foo.bar} public class Foo { public String get(String name){ return "something calclulated"; } public void set(String name, String value){ doSomething(name, value); }
${foo.bar}
public class Foo {
public String get(String name){
return "something calclulated";
}
public void set(String name, String value){
doSomething(name, value);
}
}
public class FooAccessor {
getFieldValue(String fieldName, Foo target){
return target.get(fieldName);
}
setFieldValue(String fieldName, String fieldValue, Foo target){
target.set(fieldName, fieldValue)
}
}
Foo对象的结构如下所示:
${foo.bar}
public class Foo {
public String get(String name){
return "something calclulated";
}
public void set(String name, String value){
doSomething(name, value);
}
}
public class FooAccessor {
getFieldValue(String fieldName, Foo target){
return target.get(fieldName);
}
setFieldValue(String fieldName, String fieldValue, Foo target){
target.set(fieldName, fieldValue)
}
}
我的JSTL表达式失败,因为Foo不包含bar的getter,由于结构原因,我无法实现它
如果我试图访问Foo类型的bean,是否可以向spring添加一个自定义字段访问器,它使用我的“get”和“set”方法,而不是寻找正确的getter或setter
大概是这样的:
${foo.bar}
public class Foo {
public String get(String name){
return "something calclulated";
}
public void set(String name, String value){
doSomething(name, value);
}
}
public class FooAccessor {
getFieldValue(String fieldName, Foo target){
return target.get(fieldName);
}
setFieldValue(String fieldName, String fieldValue, Foo target){
target.set(fieldName, fieldValue)
}
}
经过一些研究,我找到了接口PropertyAccessor,BeanRapperImpl类也使用它
不幸的是,我没有找到任何关于如何添加自定义字段访问器的示例或解决方案。JSP EL支持传递参数已有一段时间了。如果我只把它用于显示数据,你就不能只做
${foo.get(“bar”)}
。我的目标是使用类“Foo”作为模型,以便将其绑定到表单中。如果我在JSTL中使用函数get(),我就不能使用其他绑定功能,必须自己映射控制器中的每个写操作。创建一个简单的包装类,将委托给Foo类公共类FooWrapper{private Foo Foo;public FooWrapper(Foo Foo){this.Foo=Foo;}public void getBar(){return foo.someMethod();}public void setBar(String bar){foo.someMethod(bar);}}
感谢您的想法。这是可能的,但我无意使用通用setter,因为我必须为每个属性实现一个setter。