Заполнение таблицы на основе значений, выбранных из выпадающего списка в приложении struts2

#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 только для этой части..