#java #jsp #struts2
#java #jsp #struts2
Вопрос:
У меня есть выпадающий список на странице jsp, содержащий следующий код
<s:select name="newQuestion.CertificationId"
list="certificationList"
listKey="certificationId"
listValue="certificationName"
headerKey=""
headerValue="Select Certification"
label="Certification Name"
onchange="getQuestionsList(this.value)" />
Теперь событием изменения выпадающего списка является вызов функции JS getQuestionsList(), которая намеревается получить список вопросов с выбранным идентификатором сертификации.
В функции JS я отправляю ее в класс action, где я выполняю вызов DB для извлечения списка вопросов на основе значений идентификатора сертификации
function getQuestionDetails(value){
var submiturl = "Action1.action?certId=" value;
$.ajax({
url:submiturl,
type: 'get',
beforeSend: function(){
$("#loading").show();
alert("parsed");
},
success: function(result){
if(result!=''){
} else {
alert(result);
}
},
});
}
Теперь в классе action я устанавливаю значение questionList значениями, которые я извлекаю из базы данных.questionList — это переменная экземпляра в классе action с методами getter и setter.Теперь в struts.xml Я перехожу к тому же jsp, где у меня был выпадающий список
<action name="questionAction" class="questionInfo.QuestionManager"
method="displaySelectedQuestions">
<result name="loaded">/questionAdmin.jsp</result>
</action>
Проблема, с которой я сталкиваюсь, заключается в том, что когда я возвращаюсь к jsp, я не могу получить список вопросов, который я отображаю в итераторе
<table class="registrationDetailsTable">
<tr class="tabledataheader">
<td>Question Id</td>
<td>Question Description</td>
</tr>
<s:iterator value="questionList">
<tr class="tabledatarow">
<td><s:property value="questionId" /></td>
<td><s:property value="questionDesc" /></td>
</tr>
</s:iterator>
</table>
Пожалуйста, дайте мне знать, где я ошибаюсь, чтобы у меня был заполнен список вопросов в моем jsp
Ответ №1:
Когда вы вызываете свое действие с помощью $.ajax(...)
, действие создает ответ путем пересылки в представление (questionAdmin.jsp), верно? И этот ответ должен быть доступен вам в обработчике возвращаемого значения этого вызова Ajax.
Итак, когда у вас есть это:
success: function(result){
if(result!=''){
// nothing here currently!
} else {
alert(result);
}
}
Вы должны что-то сделать с результирующим HTML. Вы могли бы начать с того, что просто alert(result)
посмотрите, что вы получаете, а затем отобразить новое содержимое списка с помощью Javascript. Я бы сделал это так, чтобы у вас был div, содержащий вашу таблицу следующим образом:
<div id="myTableWrapper"> <!-- I added this div -->
<!-- This part should come from the action when called by Ajax -->
<table class="registrationDetailsTable">
<tr class="tabledataheader">
<td>Question Id</td>
<td>Question Description</td>
</tr>
<tr class="tabledatarow">
<td>1</td>
<td>My question #1</td>
</tr>
<tr class="tabledatarow">
<td>2</td>
<td>My question #2</td>
</tr>
</table>
<!-- //This part should come from the action when called by Ajax -->
</div>
Итак, теперь вы можете сделать это:
success: function(result){
if(result!=''){
$('.myTableWrapper').html(result);
} else {
alert(result);
}
}
Комментарии:
1. Когда я печатаю результат в вызове ajax, выполненном выше, я получаю исходный код для questionAdmin.jsp.
2. В приведенном выше классе действий QuestionManager я извлекаю список вопросов из базы данных, используя идентификатор вопроса, переданный в URL, и установил то же самое, используя метод setter questionList, который является экземпляром, изменяемым для этого класса действий
3. @Sam Не выдает ли questionAdmin.jsp правильный вывод? Можете ли вы обновить HTML-код вашей таблицы с помощью этого вывода? Я не уверен, как помочь дальше, поскольку я не понимаю, в чем на самом деле заключается ваша проблема на данный момент. Вы должны быть в состоянии 1) Загрузить свой список с начальными значениями, 2) Выбрать идентификатор, отправить его как вызов Ajax для вашего действия и 3) отобразить результат (= измененный список) этого вызова на вашей странице с помощью Javascript.
4. Спасибо Delta за всю вашу помощь. Мне удалось извлечь часть выходных данных и переопределить html только для этой части..