jsp には Start と Stop という 2 つのボタンがあります。
期待される:開始ボタンがクリックされるのは 1 回のみであり、カウントが開始され、停止ボタンが押されたときにカウントが停止する必要があります。
(コードを参照すると、停止ボタンが押されたときに関数stop_action()を呼び出す必要があり、ブール値の stopOperationを true に設定し、**start_action() で反復を停止する必要があります**。)
実際: [開始] ボタンがクリックされるたびに、新しいカウントが開始されます。何度ストップボタンを押してもカウントが止まりませんでした。
コードは次のとおりです。
faces-config.xml では、 FunctionExit (クラス、abcwar.FunctionExit) にリクエスト スコープがあります。
クラスFunctionExitは次のとおりです。
package abcwar;
import com.sun.rave.web.ui.appbase.AbstractPageBean;
import javax.faces.FacesException;
public class FunctionExit extends AbstractPageBean {
private boolean stopOperation = false;
private void _init() throws Exception {
}
public FunctionExit() {
}
@Override
public void init() {
try {
_init();
} catch (Exception e) {
log("FunctionExit Initialization Failure", e);
throw e instanceof FacesException ? (FacesException) e : new FacesException(e);
}
@Override
public void preprocess() {
}
@Override
public void prerender() {
}
@Override
public void destroy() {
}
public String stop_action() {
setStopOperation(true);
System.out.println("getStopOperation() :" + getStopOperation());
return "true";
}
public String start_action() {
long steps = 0;
while (!getStopOperation()) {
steps++;
System.out.println("Step Count :" + steps + ", getStopOperation() :" + getStopOperation());
}
return null;
}
public boolean getStopOperation() {
return stopOperation;
}
public void setStopOperation(boolean stopOperation) {
this.stopOperation = stopOperation;
}
}