我显示了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;
}
答案 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;
}