Помешать одной функции из другой функции в Java
У меня есть две кнопки в JSP, а именно Start и Stop.
Ожидаемый: только после нажатия кнопки "Пуск" должен начаться отсчет, и при нажатии кнопки "Стоп" отсчет должен быть остановлен.
(Со ссылкой на код, когда нажата кнопка " Стоп", должна быть вызвана функция stop_action(), булево значение stopOperation установлено в true и **, в то время как итерация должна прекратиться в start_action() **.)
Фактически: всякий раз, когда нажимается кнопка "Пуск", начинается новый отсчет. Подсчет не может быть остановлен, даже многократно нажав кнопку Стоп.
Код выглядит следующим образом:
В face -config.xml FunctionExit (class, 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;
}
}
1 ответ
После
(i) определение функций start_action(), stop_action() и переменной класса boolean stopOperation в классе Session Scoped, SessionBean1
(ii) сделать свойство Disabled кнопки Stop =! свойство Disabled кнопки Start
ожидаемое поведение было достигнуто.
Код выглядит следующим образом:
package abcwar;
import com.sun.rave.web.ui.appbase.AbstractSessionBean;
import javax.faces.FacesException;
public class SessionBean1 extends AbstractSessionBean {
private boolean stopOperation = false;
private long steps = 0;
private void _init() throws Exception {
}
public SessionBean1() {
}
@Override
public void init() {
try {
_init();
} catch (Exception e) {
log("SessionBean1 Initialization Failure", e);
throw e instanceof FacesException ? (FacesException) e : new FacesException(e);
}
}
@Override
public void passivate() {
}
@Override
public void activate() {
}
@Override
public void destroy() {
}
protected ApplicationBean1 getApplicationBean1() {
return (ApplicationBean1) getBean("ApplicationBean1");
}
public boolean isStopOperation() {
return stopOperation;
}
public void setStopOperation(boolean stopOperation) {
this.stopOperation = stopOperation;
}
public String stop_action() {
setStopOperation(true);
System.out.println("getStopOperation() :" + isStopOperation());
return null;
}
public String start_action() {
if (steps <= 0) {
steps = 0;
}
setStopOperation(false);
while (!isStopOperation()) {
steps++;
System.out.println("Step Count :" + steps + ", getStopOperation() :" + isStopOperation());
}
return null;
}
}