Электронный магазин на Java и XML

         

Начало метода doPost (Interpreter.java)



Листинг 7.16. Начало метода doPost (Interpreter.java)

// req contains user response public void doPostQ( PrintWriter out, HttpServletRequest req, Recorder recordB ){ if( recordB.terminated ){ writeHead( out );
out.println("<b>
This questionnaire has been terminated</b>
");
return ; } String action = req.getParameter("action");
String quesid = req.getParameter("quesid");
if( !action.equals("Next") ){ out.println("Unexpected state in Interpreter.doPost<br>
");
return ; } if( quesid.equals("intro") ){ // this calls for generating first question // doIntro already set nowNode to first <Ques>
node genQuest( out );
return ; } // if here, not generating first question, examine request Element E = (Element) nowNode ; NodeList oplist = E.getElementsByTagName("Qopt");
int type = lookUpType( E.getAttribute("type"));
String lim = E.getAttribute("limit");
// ? String[] optS = req.getParameterValues("opt");
recordB.record( quesid, type, optS );

Следующий шаг метода doPostQ, как показано в листинге 7.17, сводится к тому, чтобы определить, инициирует ли последний записанный ответ пользователя переход к новой ветви опроса. Естественно, новая ветвь начинается с первого вопроса в блоке, как указано в методе setBranch. Если переходить на новую ветвь не нужно, определяется место данного вопроса в текущем элементе Block и выполняется переход к следующему вопросу. Также нужно предусмотреть ситуацию, когда элемент, следующий за текущим вопросом, является завершающим; в этом случае мы вызываем метод getTerminal, функции которого описаны в следующем разделе и связаны с формированием последней страницы опроса.



Содержание раздела