根据从struts2应用程序中的下拉列表中选择的值填充表

时间:2011-06-10 18:06:45

标签: 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)" />

现在,下拉列表的on change事件正在调用JS函数getQuestionsList(),它打算获取所选认证ID的问题列表。

在JS函数中,我将它提交到一个动作类,我正在进行数据库调用,根据认证ID的值获取问题列表

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);
        }
    },
  });
}

现在在动作类中我设置了queryList的值,其中包含我从数据库中获取的值.questionList是动作类中的实例变量,带有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 个答案:

答案 0 :(得分: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);
        }
    }