我正在尝试通用化一些 JSF 页面。所请求的功能之一是使它们与字段名无关——将字段名作为参数传递,而不是将它们绑定(bind)到支持 bean 中的特定 getter/setter。
因此,不要像这样绑定(bind)特定字段:
<custom:editor value="#{backingViewBean.editorValue}" />
...到像这样的后端方法:
public String getEditorValue() ...
public void setEditorValue(String editorValue) ...
...我正在尝试将其绑定(bind)到如下后端方法:
public String getFieldValue(String fieldName) ...
public void setFieldValue(String fieldName, String fieldValue) ...
是否有一些优雅的方法可以使用 value
属性来模仿 getter 和 setter 通常的行为?或者这种方法是否需要比这更复杂的方法?
最佳答案
对我来说,您似乎正在寻找一种方法来为 bean 内的所有变量设置一对 getter 和 setter,因此如果您要“惰性”它们来获取托管 bean 中的所有数据,您可以实现 java.util.Map
到 bean 中,然后您可以像这样覆盖 put 和 get 方法:
公共(public)类 DataBean 实现可序列化、java.util.Map {
public class DataBean implements Serializable, java.util.Map {
private static final long serialVersionUID = 1L;
private final HashMap<String, Object> BeanData;
public DataBean(){
BeanData = new HashMap<String,Object>();
}
@Override
public Object get(final Object key) {
if (key == null) {throw new IllegalArgumentException("Key cannot be null.");}
return BeanData.get(key);
}
@Override
public Object put(final Object key, final Object value) {
if (key == null) {throw new IllegalArgumentException("Key cannot be null.");}
BeanData.put(key.toString(), value);
return null;
}
这将允许您在 bean 中存储值,而无需为 bean 中的每个 var 创建 getter 和 setter:
<h:inputText value="#{dataBean.key1}"></h:inputText>
<h:outputLabel value="#{dataBean.key1}"></h:outputLabel>
<h:inputText value="#{dataBean.key2}"></h:inputText>
<h:outputLabel value="#{dataBean.key2}"></h:outputLabel>
关于jsf - 我可以在 JSF 中的 Backing Bean 的 Getter 和 Setter 中添加额外的参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20668268/