JSF一次切换多个相同的图像

时间:2013-12-27 17:24:09

标签: jsf-2

我显示了50多张相同的图像。点击所选图像应更改为另一个图像。我的问题是,使用以下代码,单击切换所有图像,而不仅仅是单击的图像,因为它引用相同的事物50次以上。有没有办法做到这一点,而不需要为每个图像制作不同的变量?我的代码:

(这50次......):

<h:commandLink action="#{bean.imageToggle}">
    <h:graphicImage value="#{bean.img}" />
</h:commandLink>

imgToggle功能:

public String imageToggle() {
    if (img.equals("resources/images/first.png"))
        img = "resources/images/second.png";
    else
        img = "resources/images/first.png";
    return img;
}

1 个答案:

答案 0 :(得分:0)

尝试使用对象类型操作img 也许是这样的:

MyImg.class

public class MyImg{
    private String pic1;
    private String pic2;
    private boolean isPic1=true;

    public MyImg(String pic1, String pic2){//Constructor
        this.pic1=pic1;
        this.pic2=pic2;
    }

    public void imageToggle(){//To flag "isPic1"
        isPic1=!isPic1;
    }

    public String getPic(){
        if(isPic1){
            return pic1;
        }else{
            return pic2; 
        }
    }

}

你有50多个MyImg对象。我将 imageToggle() 移动到MyImg.class,以便每个MyImg对象记录并标记自己的状态。

当然,你也需要编辑 Page
网页:

<p:dataTable var="img" value="#{myBean.myImgs}">    
    <p:column>  
        <h:commandLink action="#{img.imageToggle()}">
            <h:graphicImage value="#{img.pic}" />
        </h:commandLink>
    </p:column>  
</p:dataTable>  

使用<p:dataTable> Primefaces,您不需要声明如此多的变量,只需将数据放入Bean中的List,就像:

<强>为myBean:

private List<MyImg> myImgs=new ArrayList<>();

@PostConstruct
public void initializeImgs(){
    myImgs.add(new MyImg("resources/images/first_1.png","resources/images/second_1.png"));
    myImgs.add(new MyImg("resources/images/first_2.png","resources/images/second_2.png"));
...
}

public List<MyImg> getMyImgs(){
    return myImgs;
}