在我的spring应用程序中的控制器的一些方法中,我有一些方法将String值返回给视图,如下例所示:
@RequestMapping(value="cadastra_campo", method=RequestMethod.GET)
public String cadastra_campo(@ModelAttribute("username") String username, @RequestParam("nome") String campo) {
if(key.temAutorizacao(key.getUsuarioByUsername(username).getId())) {
if(key.cadastra(campo))
return "yes";
else
return "not";
}
else {
return "no_permit";
}
}
但是,通过浏览器的控制台监视视图收到的值,我意识到他们所有人都试图找到像/jst/yes.jsp这样的页面。
这个输出在视图中由jquery函数读取:
$("#incluir_campo").on("click", function () {
$.ajax({
type: "GET",
url: "<c:out value="${pageContext.request.contextPath}/key/cadastra_campo"/>",
data: {nome: $("input[name=nome_campo]").val() }
}).done(function(data){
if(data=="yes") {
var newRow = $("<tr>");
cols = 'td> <input type="text" name="${item_key.nome}" value="${item_key.nome}"> </td>';
cols += '<td> <button type="button" id="excluir_campo_${item_campo.id}" class="btn btn-link">Excluir</button> </td>';
newRow.append(cols);
$("table.campos").append(newRow);
$("input[name=nome_campo]").reset();
}
else {
alert("erro ao incluir campo");
}
}).fail(function(){
alert("falha ao incluir campo");
});
});
我使用java配置代替文件web.xml和spring-servlet.xml,通过这个类:
WebAppInitializer.java
@Order(value=1)
public class WebAppInitializer implements WebApplicationInitializer {
@SuppressWarnings("resource")
@Override
public void onStartup(ServletContext container) {
// Create the 'root' Spring application context
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.register(WebAppConfig.class);
// Manage the lifecycle of the root application context
//container.addListener(new ContextLoaderListener(rootContext));
// Create the dispatcher servlet's Spring application context
AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();
dispatcherContext.register(DispatcherConfig.class);
// Register and map the dispatcher servlet
ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
WebAppConfig.java
@EnableWebMvc
@EnableTransactionManagement(mode=AdviceMode.PROXY, proxyTargetClass=true)
@ComponentScan(value="com.horariolivre")
@Configuration
public class WebAppConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/bootstrap/**").addResourceLocations("/bootstrap/").setCachePeriod(31556926);
registry.addResourceHandler("/extras/**").addResourceLocations("/extras/").setCachePeriod(31556926);
registry.addResourceHandler("/jquery/**").addResourceLocations("/jquery/").setCachePeriod(31556926);
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
有人知道如何为我的视图正确接收一个String值,而不是尝试到达一个jsp页面?
答案 0 :(得分:2)
如果您未在ViewResolver
可用的上下文配置中提供DispatcherServlet
,则它将使用默认值。该默认值为InternalResourceViewResolver
。
当@RequestMapping
处理程序方法返回String
时,Spring使用ViewNameMethodReturnValueHandler
来处理它。它会将返回的String
值设置为请求的视图名称。在线下,Spring的DispatcherServlet
将使用InternalResourceViewResolver
根据提供的名称解析视图。这将是一个JSP。然后它将转发到该JSP。
如果要将处理程序方法的String
返回值作为HTTP响应的主体返回,请使用@ResponseBody
注释该方法。 Spring将使用RequestResponseBodyMethodProcessor
将值写入HttpServletResponse
OutputStream
。