我正在使用SringMVC,我正在寻找一种简单的解决方案,将JSP加载到另一个JSP文件的div框中。我听说过使用Tiles但是我更喜欢使用ajax / jquery。任何人都可以帮助我吗?我正试着让这个工作两天了... 我目前的做法是这样的:
$(document).ready(function() {
var html = '<jsp:include page="searchSites.jsp"/>';
$('#contentbox').load(html);
});
但这是在第二行抛出“未捕获的SyntaxError:意外的令牌ILLEGAL”错误。我也试过c:import但是这也行不通。 非常感谢你的帮助!
编辑:
@Controller
@RequestMapping("/search")
public class SearchController {
@Autowired private SiteService siteService;
@Autowired private SystemService systemService;
@RequestMapping(value = "")
public String displaySearch(Model model) {
return "displaySearch";
}
@RequestMapping(value = "sites", method = RequestMethod.POST )
public String displaySites(Model model, @RequestParam String searchStr) {
List<RSCustomerSiteViewDTO> sites = siteService.getSitesByName(searchStr);
model.addAttribute("sites", sites);
return "searchSites";
}
@RequestMapping(value = "systems", method = RequestMethod.POST)
public String displaySystems(Model model, @RequestParam String searchStr) {
List<RSServicedSystemViewDTO> systems = systemService.getSystemsByName(searchStr);
model.addAttribute("systems", systems);
return "searchSystems";
}
}
displaySearch.jsp
<html>
<head>
<title>Site</title>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<link rel="stylesheet" href="<c:url value="resources/css/style.css" />" />
<script>
$(document).ready(function() {
var html = '/crsp/search/sites';
$('#contentbox').load(html);
});
</script>
</head>
<body>
<div id="content">
<div id="searchdiv">
<form method="POST" action="search/sites">
<input type=text name=searchStr placeholder="Search Site..."
id="searchSite" class="search" />
</form>
<form method="POST" action="search/systems">
<input type=text name=searchStr placeholder="Search System..."
id="searchSystem" class="search" />
</form>
</div>
<div id="contentbox">
</div>
</div>
</body>
</html>
searchSites.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="false"%>
<table>
<tr id="header">
<td>Name</td>
<td>Customer</td>
<td>City</td>
<td>Region</td>
</tr>
<c:forEach var="site" items='${sites}' varStatus="loopStatus">
<tr class="${loopStatus.index % 2 == 0 ? 'even' : 'odd'}">
<td>${site.siteName}</td>
<td>${site.customerName}</td>
<td>${site.siteCity}</td>
<td>${site.regionName}</td>
</tr>
</c:forEach>
</table>
编辑: 我靠近了。我必须从形式而不是直到现在的行动中发出这样的东西,然后它会起作用:建议?
function searchSites(searchStr) {
$.ajax({
type: "POST",
url: "sites?searchStr=",
success: function(data) {
$("#contentbox").html(data);
}
});
}
答案 0 :(得分:1)
您应该删除JSP标记
var html = 'searchSites.jsp';
$('#contentbox').load(html);
答案 1 :(得分:1)
load方法应该提供一个url,该url与您的某个控制器方法的映射相对应。
<强>控制器强>
@Controller
@RequestMapping("/site")
public class MyController{
@RequestMapping("/search")
public String getFragment(){
return "fragment";
}
}
<强>的Javascript 强>
$(document).ready(function() {
var html = "/contextRoot/site/search"; //you may need to use jstl c:url for this
$('#contentbox').load(html);
});
<强>配置强>
请注意此示例,假设您在调度程序配置文件中设置了ViewResolver
,如下所示,并且WEB-INF目录的根目录中有一个fragment.jsp
文件:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/" />
<property name="suffix" value=".jsp" />
</bean>
Spring MVC中请求处理的基本概念是请求“以某种方式”映射到控制器方法。 Spring MVC提供了各种方法来执行此URL,请求类型,参数存在,参数值等...但基本上它归结为哪个控制器/方法应该处理此请求。这通常是使用@RequestMapping
完成的。
发现方法后发生数据绑定,这意味着请求参数作为参数提供给方法。再一次,有各种方法可以将参数与参数匹配,包括路径变量,模式分布等......
接下来执行该方法的主体,这几乎是自定义的,并且您提供了实现。
下一部分是你似乎陷入困境的地方。控制器方法接下来告诉Spring应该显示哪个视图。再一次有很多方法可以做到这一点,但最常见的一种方法是在方法的末尾返回一个与视图(.jsp)对应的String
。通常会注册视图解析程序,以避免在返回的String
中硬编码视图文件的名称。返回的String
由ViewResolver
解析,并返回相关的视图。
如果您想在处理displaySearch.jsp
请求后提供search/systems
,请回答您的后续问题,您只需返回该viewName。
@RequestMapping(value = "systems", method = RequestMethod.POST)
public String displaySystems(Model model, @RequestParam String searchStr) {
List<RSServicedSystemViewDTO> systems = systemService.getSystemsByName(searchStr);
model.addAttribute("systems", systems);
return "displaySearch";
}