2014-12-03 40 views
0

我已经使用MVC创建了一个webapp。我在页面上显示多个用户链接。这些链接将链接到一些外部网站。当用户点击这些链接时,我想在我的数据库中记录一些数据,然后将用户重定向到新标签中的点击链接。在我记录了数据库中的细节之后,我还想向用户显示更新的页面。 我有一个控制器Servlet指向一个动作类,它将记录点击链接的细节。现在我必须向用户显示两个视图,它们拥有webapp的更新页面以及外部链接。我只能做其中的一个。是否有可能为用户提供两种视图?从servlet中打开一个URL

这样,我打印的网址:

<a href= 
    <% out.println(favBean.get(i).getURLLink()); %> > 
    <% out.println(favBean.get(i).getURLLink());%> 
</a> 
+0

你想在同一页面上显示合并视图(本地和外部)吗? – 2014-12-03 05:45:54

+0

然后将这些视图放在一个Jsp中,然后当链接被点击时,然后该过程将其返回到同一jsp的更新 – Secondo 2014-12-03 05:55:12

+0

如何将更新返回到您的页面?请包括您的servlet。 :) – Secondo 2014-12-03 06:02:04

回答

1

你可以使用Jquery Ajax做到这一点:

<a class="link" href= 
    <% out.println(favBean.get(i).getURLLink()); %> > 
    <% out.println(favBean.get(i).getURLLink());%> 
</a> 


<script> 
    $(".link").click(function(){ 
     //first do the servlet DB stuff 
     jQuery.ajax({ 
     type:"POST", 
     url : "myServlet", 
     data : param, 
     success : function(data) { 
     //on servlet DB stuff success open link in new tab 
      var address = $(this).attr("href"); 
      windows.open=address; 
     }); 
    }); 
</script> 

的Servlet只与普通的JavaScript的点点解决方法:

<% if(request.getAttribute("href") != null){ %> 
<script> 
    document.addEventListener('DOMContentLoaded', function(){ 
     windows.open='<%=request.getAttribute("href")%>' 
    }); 
</script> 
<%}%> 

<a href='/callMyDBGetServlet?redirect=<%=favBean.get(i).getURLLink()%>' > 
    <% out.println(favBean.get(i).getURLLink());%> 
</a> 


doGet(HttpServletRequest request, HttpServletResponse response){ 

    String href = request.getParameter("redirect"); 
    //Do my DB stuff 
    request.setAttribute("href"); 
    request.getDipatcher("sameJsp.jsp").forward(request,response); 
} 
+0

使用servlet和JSP不可能做到这一点吗? – Ajak6 2014-12-03 17:38:53

+0

这是可能的,但它会是一个讨厌的解决方法。 Jquery解决方案比IMO好得多。我将更新servlet示例。 – Sas 2014-12-03 18:04:22

+0

以及我刚才意识到,即使那样你会需要一点纯平的Javascript(不是Jquery)..:/ – Sas 2014-12-03 18:14:14