如何在getter方法中找出调用组件?

eRe*_*Rez 2 java jsf

在我的页面中,我有2个(以及更多的)图像容器.我想绑定他们的url属性,以便每个容器根据其id具有不同的源.我的JSP中有这样的东西:

<webuijsf:image id="image2" binding="#{Page1.img_2}" url="#{Page1.imgSRC}" />
Run Code Online (Sandbox Code Playgroud)

在支持bean代码中我有一个imgSRCgetter,但是我希望能够在getter中知道它被调用了哪个组件,并且基于组件的ID,我将使用某种方式switch来决定返回组件的URL .

这有可能吗?如果是这样,怎么样?

Bal*_*usC 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());
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但在JSF 1.x中,此方法不可用.我建议采用不同的方法.如果唯一的目的是消除属性/ getter样板代码,那么您可以使用a 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;
}
Run Code Online (Sandbox Code Playgroud)

哪个可以用作:

<webuijsf:image url="#{Page1.imageURLs.img1}" />
<webuijsf:image url="#{Page1.imageURLs.img2}" />
<webuijsf:image url="#{Page1.imageURLs.img3}" />
...
Run Code Online (Sandbox Code Playgroud)