gpt4 book ai didi

java - 如何在getter方法中找到调用组件?

转载 作者:行者123 更新时间:2023-12-02 01:19:01 25 4
gpt4 key购买 nike

在我的页面中,我有 2 个(以及后来更多)图像容器。我想绑定(bind)它们的 url 属性,以便每个容器根据其 id 拥有不同的源。我的 JSP 中有这样的内容:

<webuijsf:image id="image2" binding="#{Page1.img_2}" url="#{Page1.imgSRC}" />

在支持 bean 代码中,我有一个 imgSRC getter,但是我希望能够在 getter 中知道它是从哪个组件调用的,并且根据组件的 ID,我将使用一些某种 switch 来决定将哪个 URL 返回到组件。

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

最佳答案

由于您正在使用 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 中的 Javabean 一样对待 map 。

类似这样的事情:

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}" />
...

关于java - 如何在getter方法中找到调用组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9126091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com