在我的页面中,我有2个(以及更多的)图像容器。我想绑定他们的url属性,以便每个容器根据其id具有不同的源。 我的JSP中有类似的东西:
<webuijsf:image id="image2" binding="#{Page1.img_2}" url="#{Page1.imgSRC}" />
在支持bean代码中,我有一个imgSRC
getter,但是我希望能够在getter中知道它被调用的组件,并根据组件的ID我将使用某种{ {1}}决定返回组件的URL。
这有可能吗?如果是这样,怎么样?
答案 0 :(得分:7)
当您使用4年前放弃的Woodstock组件库时,我敢打赌您正在维护一个从未升级过的旧版JSF 1.x应用程序来替换死亡的Woodstock组件库。在JSF 1.x中没有API提供的方法,它允许您获取getter中的当前组件。
在JSF 2.x中,您可以使用UIComponent#getCurrentComponent()
:
public String getImgSRC() {
UIComponent component = UIComponent.getCurrentComponent(FacesContext.getCurrentInstance());
// ...
}
但在JSF 1.x中,此方法不可用。我建议采用不同的方法。如果唯一的目的是消除属性/ getter样板代码,那么您可以使用Map
来保存值。地图可以像EL中的Javabeans一样对待。
这样的事情:
private static Map<String, String> imageURLs = new HashMap<String, String>();
static {
imageURLs.put("img1", "foo.png");
imageURLs.put("img2", "bar.png");
imageURLs.put("img3", "baz.png");
// ...
}
public Map<String, String> getImageURLs() {
return imageURLs;
}
可以用作:
<webuijsf:image url="#{Page1.imageURLs.img1}" />
<webuijsf:image url="#{Page1.imageURLs.img2}" />
<webuijsf:image url="#{Page1.imageURLs.img3}" />
...