如何检测单击的按钮的名称并设置要计算的布尔变量?
How To Detect The Name Of A Button Clicked And Set A Boolean Variable To Be Evaluated?
我有一个 actionListener 来检测何时单击命令按钮,然后我打算将一个布尔变量设置为 true 并在另一个要执行的方法中评估它;如果为真,则加载 some 项;如果为假,另一个项被加载:
xhtml:
<h:form id="myFormID" ... >
<p:commandButton id="myButtonID" value="Some Title" action="#{myController.pressedFilter()}" actionListener="#{myController.checkClicked}" />
...
</h:form>
控制器 class:
//the boolean variable:
private boolean clicked;
public boolean isClicked() {
return clicked;
}
public void setClicked(boolean clicked) {
this.clicked = clicked;
}
//the actionListener to detect the button clicked:
public boolean checkClicked(ActionEvent ev) {
String buttonClickedID = ev.getComponent().getClientId();
if (buttonClickedID.equals("myFormID:myButtonID")) {
setClicked(true);
}
return clicked;
}
//the method to retrieve the items:
public Collection<T> getItems() {
if (isClicked()) {
items = this.ejbFacade.findSomeItems();
} else if (!isClicked()) {
items = this.ejbFacade.findAnotherItems();
}
return items;
}
//clears all datatable filters:
public String pressedFilter() {
clearAllFilters();
return "/app/index";
}
不幸的是,我不知道为什么它没有像我预期的那样工作。
如果我点击命令按钮,布尔变量设置为真;但是在评估的时候不知道为什么这个值是false
有人可以解释我做错了什么并帮助我修复它以使其像我描述的那样工作吗?
提前致谢。
如评论中所述。问题是您使用的是 @ViewScoped
bean,每次视图更改(例如浏览器刷新)时都会重新创建该 bean。检查一下:JSF Scopes.
因此,将 bean 范围更改为 @SessionScoped
可能会解决问题。
我有一个 actionListener 来检测何时单击命令按钮,然后我打算将一个布尔变量设置为 true 并在另一个要执行的方法中评估它;如果为真,则加载 some 项;如果为假,另一个项被加载:
xhtml:
<h:form id="myFormID" ... >
<p:commandButton id="myButtonID" value="Some Title" action="#{myController.pressedFilter()}" actionListener="#{myController.checkClicked}" />
...
</h:form>
控制器 class:
//the boolean variable:
private boolean clicked;
public boolean isClicked() {
return clicked;
}
public void setClicked(boolean clicked) {
this.clicked = clicked;
}
//the actionListener to detect the button clicked:
public boolean checkClicked(ActionEvent ev) {
String buttonClickedID = ev.getComponent().getClientId();
if (buttonClickedID.equals("myFormID:myButtonID")) {
setClicked(true);
}
return clicked;
}
//the method to retrieve the items:
public Collection<T> getItems() {
if (isClicked()) {
items = this.ejbFacade.findSomeItems();
} else if (!isClicked()) {
items = this.ejbFacade.findAnotherItems();
}
return items;
}
//clears all datatable filters:
public String pressedFilter() {
clearAllFilters();
return "/app/index";
}
不幸的是,我不知道为什么它没有像我预期的那样工作。
如果我点击命令按钮,布尔变量设置为真;但是在评估的时候不知道为什么这个值是false
有人可以解释我做错了什么并帮助我修复它以使其像我描述的那样工作吗?
提前致谢。
如评论中所述。问题是您使用的是 @ViewScoped
bean,每次视图更改(例如浏览器刷新)时都会重新创建该 bean。检查一下:JSF Scopes.
因此,将 bean 范围更改为 @SessionScoped
可能会解决问题。