有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

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

这可能吗?如果是,怎么做


共 (1) 个答案

  1. # 1 楼答案

    当你在使用四年前被废弃的Woodstock组件库时,我敢打赌你正在维护一个遗留的JSF 1。x应用程序,但从未升级以替换废弃的Woodstock组件库。JSF 1中有一个。x没有API提供的方法,该方法允许您获取getter中的当前组件

    在JSF2中。你可以用^{}来做这个:

    public String getImgSRC() {
        UIComponent component = UIComponent.getCurrentComponent(FacesContext.getCurrentInstance());
        // ...
    }
    

    但是在JSF1中。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}" />
    ...