对于 JSF、Managed Beans 和 EL 2.2,我通常知道以下形式的表达式:
#{bean.value}
将映射到托管 bean 类中的一组相应函数,如下所示:
@ManagedBean
class Bean {
private String value;
public String getValue() { return value; }
public void setValue( String s ) { value = s; }
}
也可以获取和设置地图的属性:
#{bean.value['key']}
由以下内容支持:
@ManagedBean
class Bean {
private Map<String, Boolean> kvMap;
public boolean getValue( String key ) { return kvMap.get( key ); }
public void setValue( String key, boolean value ) { kvMap.put( key, value ); }
}
到现在为止还挺好。
随着我花更多时间在 JSF 上,我发现我正在尝试编写可重用的代码块。<ui:composition>
具体来说,我可以通过包含的块中的小块 xhtml <ui:include>
。更重要的是,对我来说,许多更有用的东西是嵌套的复选框集(我们的 UI 设计师对它们很感兴趣 ;-),它们<ui:repeat>
变得非常方便。
总是,为了使用<ui:repeat>
并且<ui:include>
没有大量的打字,我一直在使用别名,无论是通过创建<ui:param>
还是内联类似的var
属性<ui:repeat>
。
随着我一直在编写越来越多的嵌套 UIComponent,尤其是从地图中的地图获取其值的东西,我发现越来越难以推断出 JSF 在提交表单时将寻找的正确 setter 方法签名(对于某些原因写 getter 似乎更自然)。
那么我对各位大师的问题是:
有什么方法可以让 JSF 告诉我它期望 setter 签名的样子吗?由于 JSF 通常不会抱怨解析为 getter-only 的表达式(认为它是只读属性),因此我发现缺乏反馈令人沮丧,而且在我之前似乎需要大量摆弄不同的方法签名终于击中了那个魔法吧。
我希望有一些技术,比如在运行时进行 FacesContext... 查询,或者查看一些编译的中间体(如类文件),这将指向深度嵌套属性的正确设置器签名。如果有这样的事情,我认为它会为我节省很多时间来试图弄清楚如何通过反复试验来构建一个 setter。
希望我已经清楚地表达了我所追求的,在此先感谢您的回复。