我正在编写PrimeFaces应用程序。我的XHTML中有以下代码:
<p:selectOneMenu value="#{lottoCheckerBean.selectedPowerBallDrawingDate}">
<f:selectItems value="#{lottoCheckerBean.powerBallDrawingDates}" />
</p:selectOneMenu>
我希望在选择值时,在我的LottoCheckerBean
中执行以下代码:
public void setSelectedPowerBallDrawingDate(String selectedPowerBallDrawingDate) {
//get drawing
PowerBallDrawing currentDrawing = null;
for (int d = 0; d < powerBallDrawings.size(); d++) {
if (powerBallDrawings.get(d).getDrawingDate().equals(selectedPowerBallDrawingDate)) {
currentDrawing = powerBallDrawings.get(d);
break;
}
}
if (currentDrawing == null) {
try {
//create new drawing;
currentDrawing = new PowerBallDrawing(selectedPowerBallDrawingDate);
powerBallDrawings.add(currentDrawing);
Arrays.sort(powerBallDrawings.toArray());
} catch (Exception ex) {
//will not happen so ignore
}
}
this.selectedPowerBallDrawingDate = selectedPowerBallDrawingDate;
}
但是,如果我在上述方法的开头设置断点,则不会到达断点。
我错过了什么?
答案 0 :(得分:4)
当您提交放置selectOneMenu
的表单时,将会调用您希望在更改上执行的代码。那是将selectOneMenu
的值传递给您的bean。
如果您想要对任何其他事件执行某些操作,例如更改,则需要启用 ajax :
<p:selectOneMenu value="#{lottoCheckerBean.selectedPowerBallDrawingDate}" >
<f:selectItems value="#{lottoCheckerBean.powerBallDrawingDates}" />
<p:ajax event="change" listener="#{lottoCheckerBean.someMethod}" />
</p:selectOneMenu>
在支持bean中更改值时,将调用someMethod()
。
我建议您仅将setSelectedPowerBallDrawingDate(String selectedPowerBallDrawingDate)
用作设置值的setter,而不是根据任何业务逻辑。然后让您从<p:ajax/>
调用的方法执行业务逻辑。