【问题标题】:Query database and display result on the same page查询数据库并在同一页面显示结果
【发布时间】:2016-02-15 08:47:28
【问题描述】:

我目前正在研究 Spring 框架。我在 abc.jsp 页面上有一个按钮,它向我的控制器发送 GET 请求。控制器调用 DAO 中的一个方法,并返回一个包含数据的列表并将其转发给 def.jsp。当我们单击按钮时,有没有办法直接在 abc.jsp 上显示数据表。在我的研究中,我发现 AJAX 是一种实现方式。我以前没有使用过 AJAX,我不确定如何使用它,因为我需要获取一个列表。任何帮助,将不胜感激。我在下面附上了我的代码所需的 sn-ps。提前致谢,

abc.jsp

<form action="abcd" method="get">
          <button type="submit" onclick="startSpin()">Items in ABCD</button>
</form>

控制器代码

@Controller
@RequestMapping("application")
public class ApplicationController {

    @Autowired
    AppDAO AppDAO;

    private static final Logger LOGGER = LoggerFactory.getLogger(MasterDataObjectEntityController.class);

    @RequestMapping (value="/abcd",method=RequestMethod.GET)
    public String getItemsInABCD(ModelMap map, HttpServletRequest req){
        LOGGER.info("ApplicationController :: ");      
        try {
            map.addAttribute("ItemsInABCDList", AppDAO.getItemsInABCDList());
        } catch (SQLException e) {
            LOGGER.error("ApplicationController :: getItemsInABCDList:: SQLException ::"+e.getMessage());
        }
        return "def"; <-- goes to def.jsp
    }
}

def.jsp

<table class="table table-bordered table-striped table-hover"
                        id="mytable" style="width: 95%;">

                        <thead>
                            <tr style="font-weight: bold;">

                                <td>col 1</td>
                                <td>col 2</td>

                            </tr>
                        </thead>
                        <tbody>
                            <c:forEach var="myvar" items="${ItemsInABCDList}">
                                <tr>
                                    <td>${myvar.itemNumber}</td>
                                    <td>${myvar.itemName}</td>
                                </tr>

                            </c:forEach>
                        </tbody>
                    </table>

<script type="text/javascript">

var mytable= null;
$(document).ready(function() {
    mytable=  $('#mytable').dataTable(
             {
                //columnDefs: [ { orderable: false, targets: [0] }]
                columnDefs: [{
                    targets: "datatable-nosort",
                    orderable: false
                }]
             });

          $('[data-toggle="tooltip"]').tooltip(); 

        });
</script>

【问题讨论】:

  • 您的 getItemsInABCD 正在返回字符串而不是任何列表?
  • @Pallavi 它返回的字符串是响应页面的名称。它使用 return 语句重定向到 def.jsp。它使用 map.addAttribute 将列表作为对 def.jsp 的响应发送,其中 getItemsInABCDList() 返回一个 List 对象。

标签: javascript java ajax jsp spring-mvc


【解决方案1】:

您需要对代码进行一些小改动。如果可行的话。 您可以使用 Javascript 函数通过 POST/GET

调用 Axaj 请求

使用请求 URL (即 abcd)调用 createAjaxRequest 函数,并指定您的回调函数名称,即 yourCallbackFunctionName

createAjaxRequest("abcd",yourCallbackFuncationName);

function createAjaxRequest(requestURL,callbackFuncation){
    var xmlhttp;
    startStopLoader(true);
    if (window.XMLHttpRequest){
        xmlhttp=new XMLHttpRequest();
    } else {
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4 ){

            if(xmlhttp.status == 200){
                try{
                    callbackFuncation(xmlhttp.responseText);
                }catch(e){

                }               
             }

        }
    }
    xmlhttp.open("GET",requestURL,true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");   
}

function yourCallbackFuncationName(response) {
        // you can manupulate your list stored in response variable 
        // you can generate your tr/td here and put it back in your main  
          table using innerHTML
}

并且您需要在您的 java 文件中使用 @ResponseBody 并返回您的项目列表。可能看起来像下面的代码

@RequestMapping (value="/abcd",method=RequestMethod.GET) 
@ResponseBody
    public ItemsInABCDListBean getItemsInABCD(ModelMap map, HttpServletRequest req){
        LOGGER.info("ApplicationController :: ");       
        try { 
           ItemsInABCDListBean ItemsInABCDList = AppDAO.getItemsInABCDList();
        } catch (SQLException e) { 
            LOGGER.error("ApplicationController :: getItemsInABCDList:: SQLException ::"+e.getMessage()); 
        } 
        return ItemsInABCDList; // returns List you want to show
    } 

希望这会对您有所帮助。它可能是您应用程序的通用代码

【讨论】:

  • 谢谢帕拉维...我会试试这个并让你知道...我以前没有处理过 AJAX 代码,所以我发现有点难以理解如何以及在哪里使用它...但我会通过一些教程并弄清楚如何使用它。非常感谢您的启蒙。 :)
  • 嗨帕拉维...我可以达到我想要的结果..我像你说的那样返回了列表并创建了一个 ajax 请求来获得响应...我找到了一个小的 sn-p 代码在帮助我将 ajax 响应放入数据表的数据表网站上...现在我可以在同一页面上填充数据表...感谢您的时间和帮助... :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-10
相关资源
最近更新 更多