Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с возвращаемыми данными из контроллера, возвращается страница, а нужно лишь форм 
:(
    Опции темы
vovs
Дата 20.9.2010, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 22.9.2006
Где: Черкассы

Репутация: нет
Всего: нет



Здравствуйте!

есть такая проблема:

Сначала вступление:
написал приложение имитирующее проверку знаний. По-простому - 
это страничка с вопросом и несколькими вариантами ответов.

обмен данными с сервером происходит с помощью ajax'а.

вот кусок контроллера, который формирует вопрос и варианты ответа:

Код

public  ModelAndView test(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
.......
        ModelMap modelMap = new ModelMap();
        modelMap.addAttribute("questionList", 
                       questionDAO.listQuestion().get(questionSize.getQuestionSize()));
        modelMap.addAttribute("question", new Question());
        modelMap.addAttribute("answerSet", 
                    questionDAO.listQuestion().get(questionSize.getQuestionSize()).getQuestionAnswers());
        modelMap.addAttribute("answer", new Answer());
    return new ModelAndView("test", modelMap);
}

вот test.jsp:

Код

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 

"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="css/style.css">
<script type="text/javascript" src="javascript/jquery.js"></script>
<script type="text/javascript" src="javascript/func.js"></script>
<title>Система проверки знаний</title>
</head>
<script type="text/javascript">

// кнопка "Таймер" показывает и прячет DIV с обратным отсчетом
$(function()
{
$("#timer_btn").click(function(event) {
event.preventDefault();
$("#div1").slideToggle();
});
});

$(document).ready(function(){  
    $('#myForm').live('submit', function(){  
     var idr = getCheckedValue(document.forms['testForm'].elements['answers']);
        $.ajax({ 
            type: "POST",  
            url: "test.htm",  
            data: "answers="+idr,  
            success: function(html){  
                $("#content").html(html); 
        }  
        });  
        return false;  
    }); 
}); 
     </script>
<body >
<div id="div_timer_btn">
<input type="button" id="timer_btn" value="Таймер">
</div>
<div id="div1">
<span id="span"></span>
</div>
<div id="content">
<div id="nifty"> 
    <form id="myForm" name="testForm">
        <center>
            <table cellpadding=4 cellspacing=2 border=0>
            <tr>
                <td class="question" colspan="2">${questionList.question}</td>
            </tr>
                <c:forEach items="${answerSet}" var="answer" varStatus="status">
                    <tr >
                    <td width="20"> 
                                <input type="radio" name="answers" value="${answer.id}" checked ">
                               </td>
                               <td>
                               <label>${answer.answer}</label>
                               </td>
                   </tr>
                </c:forEach>
            <tr>
              <td colspan="2" align=center><input type="submit" id="subm" 
                             value="Дальше"></td>
            </tr>
            </table>
        </center>
    </form>
</div>
</div>
<script> 
<!-- 
// 
 var milisec=0 
 var seconds=60
 
function display(){ 
 if (milisec<=0){ 
    milisec=9 
    seconds-=1 
 } 
 if (seconds<=-1){ 
    milisec=0 
    seconds+=1 
    gg()
 } 
 else 
    milisec-=1 ;
    document.getElementById('span').innerHTML=seconds;
    setTimeout("display();",100) 
} 
display() 
--> 
</script>
</body>
</html>


после выбора варианта ответа я нажимаю на кнопочку "Дальше", данные уходят в ajax'е на 
контроллер, где готовится новый вопрос и ответы и  возвращается результат(у меня 
получается это 
Код
return new ModelAndView("test", modelMap);
 и этот результат 
"запихывается" в 
Код
<div id="content">
 как следует из результата успешного выполнения ajax'а 
Код
success: function(html){  
                $("#content").html(html);
 
После всех этих действий у меня на сранице появляется вторая кнопочка "Таймер".
Одна из них активная - позволяет прятать и показывать DIV c обратным отсчетом, другая 
же ни на какие действия не отзывается и исчезает если обновить страницу.

Как можно сделать, чтобы эта "мнимая" кнопка не появлялась?

вот картинки:
До нажатия на "Дальше":
user posted image

После ответа на вопрос:

user posted image

Я думаю, что кнопка появляется из-за того, что у меня в контейнер 
Код
<div id="content">
 "запихывается" все содержимое страницы test включая доктайпы, стили, скрипты.
а нужно сделать наверное чтобы туда писалась только лишь форма.
если это так, подскажите, как можно реализовать это..
PM MAIL ICQ Skype Jabber   Вверх
iluvatar
Дата 20.9.2010, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 17.9.2007

Репутация: 4
Всего: 4



Не до конца разобрался что вы бросаете в div id="content" и зачем?
По идее должно быть так

1. Рисуете страницу с первым вопросом
2. По нажатию на "далее":
    сохраняете результат (лучше в переменной js)
    шлете запрос на следующий вопрос
3а. Есть следующий вопрос
    перерисовываете форму вопроса в соответствии с присланной с сервера информации
    обновляете таймер (если нужно)
    при нажатии на "далее" идем на пункт 2
3б. Нет следующего вопроса
    шлем информацию о всех ответах на сервер
    получаем и отображаем результат теста
    
Если вопросы смешаны, то сохраняем не только вариант ответа, но и id вопроса.

Или я что-то не так понял? Зачем вам вообще формы?
PM MAIL ICQ   Вверх
vovs
Дата 20.9.2010, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 22.9.2006
Где: Черкассы

Репутация: нет
Всего: нет



В div id="content" у меня бросается модель данных (ModelAndView) вопрос и ответы для него, 
но, так как имя представления test(return new ModelAndView("test", modelMap);)? то
в контейнер div id="content" помещается ВСЯ страница test.htm..

Получается как бы страница в странице...

Мне же нужно чтобы контроллер отправлял только вопрос и ответы для него, то есть два объекта - 
объект Вопрос и объект Ответы...

PM MAIL ICQ Skype Jabber   Вверх
iluvatar
Дата 20.9.2010, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 17.9.2007

Репутация: 4
Всего: 4



Ну, откуда нам знать в каких классах у вас могут храниться вопросы и ответы. Что вообще такое ModelAndView?

ajax должен получить ответ в виде xml или json. Вы на стороне клиента должны его распарсить и что-то сделать с этими данными. В вашем случае это вставить в нужные теги нужные значения.

Добавлено через 1 минуту и 54 секунды
либо возвращайте сформированную в контроллере строку, содержащую только нужные вам элементы

Добавлено через 2 минуты и 6 секунд
но это некрасивое решение
PM MAIL ICQ   Вверх
vovs
Дата 24.9.2010, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 22.9.2006
Где: Черкассы

Репутация: нет
Всего: нет



2iluvatar

ModelAndView - модель + представление --- то, что возвращают методы контроллера в SpringMVC
Я работал с ModelAndView поэтому и использую.
Благодарю за Ваш совет.
Наверное вы предлагаете оптимальный вариант.
PM MAIL ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0471 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.