powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Нужен совет
8 сообщений из 8, страница 1 из 1
Нужен совет
    #38787524
NDAleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго всем времени!
Настал критический момент, когда не получается собрать мысли в кучу. Это мой первый веб-проект на SpringMVC + Hibernate, времени мало, а делать надо)

Есть страница, в которую попадают вопросы из БД в виде таблицы. Для каждой строки таблицы генерируются кнопки: ответить, изменить, удалить (страница админки). При нажатии первых двух кнопок, появляется всплывающее окошко с компонентами: textarea "содержимое ответа" + submit "Ответить". Часть кода:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
<c:forEach items="${questionList}" var="question">
                <tr>
                    <td>${question.message}</td>
                    <td>${question.authorName}</td>
                    <td>${question.postDate}</td>
                    <td>${question.answer}</td>
                    <td>${question.answerDate}</td>
                    <td>
                        <button onclick="addAnswerWindowShow(); windowCase = 0">Ответить</button>
                        </br>
                        <button onclick="modifyAnswerWindowShow(); windowCase = 1">Изменить</button>
                        </br>
                        <button windowCase = 2">Удалить</button>
                        </br>

                        <div id="addAnswerWindow">
                            <div class="messageBoxTitle">Добавление ответа</div>
                            <form:form accept-charset="utf-8" action="/add_answer" commandName="question" method="POST">
                                <form:textarea class="messageBox" maxlength="255" rows="5"
                                          cols="50" path="answer"></form:textarea></br></br>
                                <input class="sendBtn" type="submit" value="Сохранить">
                                <button class="sendBtn" onclick="closePopup()">Отмена</button>
                            </form:form>
                        </div>
    ...
</c:forEach>



Метода контроллера:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
   @Autowired
    private QuestionService questionService;

    @RequestMapping(value = "/add_answer", method = RequestMethod.POST)
    public String addAnswer(@ModelAttribute("question") Question question) {
        question.setAnswerDate(new Timestamp(new Date().getTime()));
        questionService.modifyQuestion(question);

        return "redirect:/answers";
    }



questionService - это надстрока над надстрокой от
Код: java
1.
2.
3.
4.
5.
6.
7.
@Autowired
private SessionFactory sessionFactory;

@Override
public void modifyQuestion(Question question) {
    sessionFactory.getCurrentSession().update(question);
}



Вся соль в том, что я не могу просто передать туда question из метода addAnswer , т.к. с JSP странички туда летит только question.answer , а остальные поля не заполнены. Короче суть вопроса - как сделать привязку всех данных в строке таблицы на JSP-страничке к кнопкам "Ответить" и "Изменить"?
...
Рейтинг: 0 / 0
Нужен совет
    #38788216
Pavel Kurakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну как вариант добавте в форму скрытые поля
Код: html
1.
2.
3.
<form:hidden path="message" />
<form:hidden path="authorName" />
... и т.д.



З.Ы. Не по теме, но в вашем коде меня еще смущает то что в цикле создается множество форм с одинаковым ID.
...
Рейтинг: 0 / 0
Нужен совет
    #38788219
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NDAleksey,

Я два раза прочитал. Нифига не понял. Что мешает вычитать Question по id? Что мешает запустить update по Answer, в котором есть Question id? Зачем передавать остальные поля?
...
Рейтинг: 0 / 0
Нужен совет
    #38788222
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavel KurakinНу как вариант добавте в форму скрытые поля
Для того чтобы сохранить Answer в базе, достаточно иметь Quotation.pk. Нафига остальные поля-то?
...
Рейтинг: 0 / 0
Нужен совет
    #38788258
Pavel Kurakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczДля того чтобы сохранить Answer в базе, достаточно иметь Quotation.pk. Нафига остальные поля-то?
Я не знаю. ТС так хотел :)
...
Рейтинг: 0 / 0
Нужен совет
    #38789814
NDAleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavel KurakinНу как вариант добавте в форму скрытые поля
Код: html
1.
2.
3.
<form:hidden path="message" />
<form:hidden path="authorName" />
... и т.д.



З.Ы. Не по теме, но в вашем коде меня еще смущает то что в цикле создается множество форм с одинаковым ID.

да, с одинаковым ID идея была ужасная, поэтому сразу же вынес его из цикла
...
Рейтинг: 0 / 0
Нужен совет
    #38789829
NDAleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczNDAleksey,

Я два раза прочитал. Нифига не понял. Что мешает вычитать Question по id? Что мешает запустить update по Answer, в котором есть Question id? Зачем передавать остальные поля?

В приведенном коде вычитать по ID не проблема. Просто несостыковка мыслей в голове - прошу прощения. Просто я тот код сразу изменил, т.к. глупо добавлять div-ы с одинаковыми ID и дублировать код в страничку. Сделал так:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
...

<c:forEach items="${questionList}" var="question">
                <tr>
                    <td>${question.message}</td>
                    <td>${question.authorName}</td>
                    <td>${question.postDate}</td>
                    <td>${question.answer}</td>
                    <td>${question.answerDate}</td>
                    <td>
                        <button onclick="setAttributes(${question.id}, 0); showPopupWindow();">Ответить</button>
                        </br>
                        <button onclick="setAttributes(${question.id}, 1); showPopupWindow();">Изменить</button>
                        </br>
                        <button windowCase = 2">Удалить</button>
                        </br>
                    </td>
                </tr>
            </c:forEach>
            </tbody>
        </table>
    </c:if>
</div>
<div id="popupWindow">
    <div class="messageBoxTitle">Добавление ответа</div>
    <form:form cssStyle="display: inline;" accept-charset="utf-8" action="/update_question" commandName="question" method="GET">
        <input id="questionId" name="questionId" type="hidden"/>
        <input id="windowCase" name="windowCase" type="hidden"/>
        <form:textarea class="messageBox" maxlength="255" rows="5"
                       cols="50" path="answer"></form:textarea></br></br>
        <input class="sendBtn" type="submit" value="Сохранить">
    </form:form>
    <button class="sendBtn" onclick="closePopupWindow()">Отмена</button>
</div>
<div id="overlay"/>



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
@RequestMapping(value = "/update_question", method = RequestMethod.GET)
    public String updateQuestion(@ModelAttribute("question") Question question, @RequestParam("questionId") String questionId) {

        if (!question.getAnswer().trim().equals("")) {
            int id = Integer.parseInt(questionId);
            Question question1 = questionService.getQuestionById(id);

            question.setId(question1.getId());
            question.setMessage(question1.getMessage());
            question.setPostDate(question1.getPostDate());
            question.setAuthorName(question1.getAuthorName());
            question.setAnswerDate(new Timestamp(new Date().getTime()));
            System.out.println(question.getAnswer());
            questionService.modifyQuestion(question);
        }

        return "redirect:/answers";
    }



Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
var _windowCase, _questionId;

function setAttributes(questionId, windowCase) {
    _questionId = questionId;
    _windowCase = windowCase;
}

function showPopupWindow() {
    document.getElementById('questionId').setAttribute('value', _questionId);

    document.getElementById('popupWindow').style.display = 'block';
    document.getElementById('overlay').style.display = 'block';
}
function closePopupWindow() {
    document.getElementById('popupWindow').style.display = 'none';
    document.getElementById('overlay').style.display = 'none';
}



Теперь окошко открывается, и сохраняется в answer , что в textarea записали. Но теперь другой вопрос: как мне при появлении всплывающего окна грузить в textarea данные из поля message , т.е. грузить текст вопроса. Мне представляется единственный способ - применить хак в скрипте.

P.S. прошу критиковать изложенный выше подход - думаю, что он не оптимален)
...
Рейтинг: 0 / 0
Нужен совет
    #38790090
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NDAleksey,

Если есть время, то попробуй jqGrid .
Для работы с ним надо будет написать RestController
Для чтения данных
Нужен такой тип, то что будет @ResponseBody (GET)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
public class ResponseBody {
    private int page;
    private int total;
    private int records;
    private List rows;

    public List getRows() {
        return rows;
    }

    public void setRows(List rows) {
        this.rows = rows;
    }

    public int getPage() {
        return page;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }

    public int getRecords() {
        return records;
    }

    public void setRecords(int records) {
        this.records = records;
    }
}



Еще нужен будет POST-обработчик для добавления, изменения, удаления.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Нужен совет
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]