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

         

Управление ветвлением опроса - часть 2


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

Листинг 7.17. Метод doPost, продолжение (Interpreter.java)

String branch = branchLookUp( oplist, optS ); if( branch != null ){ //System.out.println("Taking Branch:" + branch ); setBranch( branch ); // sets nowBlock and nowNode to new value if( nowNode == null ) genTerminal( out, recordB ); else genQuest( out ); return ; }

// branch is null, nowBlock has 1 or more <Ques NodeList qlist = ((Element)nowBlock).getElementsByTagName("Ques"); int n = 0 ; int nct = qlist.getLength(); while( qlist.item(n) != nowNode && n < nct ) n++ ; // n = nowNode Node nxtN = qlist.item(n+1); if( nxtN != null ){ nowNode = nxtN ; genQuest( out ); System.out.println("Found nextQ"); return ; } if( terminal ) genTerminal( out, recordB ); else out.println("nextQ NULL, not terminal<br>" ); } // end doPostQ




Содержание  Назад  Вперед