spring MVC要注意的地方

spring MVC要注意的地方:

控制器代码如下:

package com.mvc.jn.controller;

import java.util.Map;

import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@org.springframework.stereotype.Controller
public class HelloWorldController {

	// http://localhost:8088/springMVCannotations/hello2
	@RequestMapping(value = "/hello2", method = RequestMethod.GET)
	public String sayHello2(
			@RequestParam(value = "name", required = false) String username,
			Map<String, Object> map) {
		map.put("message1", username);
		System.out.println("my name:" + username);
		return "hello22";
	}

	// http://localhost:8088/springMVCannotations/hello3
	@RequestMapping(value = "/hello3", method = RequestMethod.GET)
	public ModelAndView sayHello3(
			@RequestParam(value = "name", required = false) String username) {
		System.out.println("my name:" + username);
		ModelAndView mav = new ModelAndView("hello33");
		mav.getModel().put("message1", username);
		return mav;
	}

	// http://localhost:8088/springMVCannotations/hello44?name=whuang
	@RequestMapping(value = "/hello44", method = RequestMethod.GET)
	// 与网上说的不一致,网上说方法名就是试图
	public Model hello4(
			@RequestParam(value = "name", required = false) String username,
			Model model) {
		System.out.println("my name:" + username);
		model.addAttribute("message1", username);
		return model;
	}

	@RequestMapping(value = "/hello555", method = RequestMethod.GET)
	public Model hello5(String username, Model model) {
		System.out.println("my name:" + username);
		model.addAttribute("message1", username);
		return model;
	}

}

 ViewResolver配置如下:

<!-- ViewResolver -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView" />
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>

 问题1:调用控制器中的hello4 方法后会返回那个视图?

按照网上的说法,会返回“hello4”(方法名),如下图



 但是经过我反复测试,发现它返回的视图是“
hello44”,即@RequestMapping 指定的value。

 

问题2:访问方法hello5时,必须传参数username 吗?

答:不是必须的。

什么情况下是必须的呢?

当有注解@RequestParam(value = "username")时才是必须的,若不传该参数将报错.

url 是“http://localhost:8088/springMVCannotations/hello555?username=ccc”时,会自动设置username的值

 

问题3:spring MVC与hibernate4集成时报错:No Session found for current thread

详情请参阅我的另一篇博客:http://hw1287789687.iteye.com/blog/1949852

 

问题4:启动tomcat时报错:java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet

原因是:pom.xml中缺少:

<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>3.2.3.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>3.2.3.RELEASE</version>
		</dependency>

 

 

问题5:spring MVC 使用bean接收参数时如何传参?

比如查询时,controller 把参数注入到bean中,

@RequestMapping(value = "/show")
	public String show(Model model,User user,UserView view,HttpSession session) throws CloneNotSupportedException {
		if(!ValueWidget.isNullOrEmpty(view.getPageFlag())&&view.getPageFlag().equals(Constant2.PAGEFLAG_NOT_QUERY)){
			System.out.println("不是查询");
			user=(User)session.getAttribute("user2");
			try {
				BeanUtils.copyProperties(view, user);
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				e.printStackTrace();
			}
		}else{//查询
			System.out.println("是查询");
			session.setAttribute("user2", user);
		}
		PageAssistant.paging(user,true,view, userDao);
		
		model.addAttribute("view", view);
		model.addAttribute("currentTime", TimeHWUtil.getCurrentTimestamp().getTime());
		
		
		return "user/show";
	}

 方法show()的参数user会保存请求要素,那么在页面上是如何编写表单控件name的呢?

  <Li>                    
                        <label>用户名:</label><input type="text"  name="user.username" value="${view.username }"  />
                    </Li>
                    <Li>
                            <label>真实姓名:</label><input type="text" name="user.name" value="${view.name }" />
                    </Li>
                   

 上述代码是不对的,应该是:

  <Li>                    

                        <label>用户名:</label><input type="text"  name="username" value="${view.username }"  />

                    </Li>

                    <Li>

                            <label>真实姓名:</label><input type="text" name="name" value="${view.name }" />

                    </Li>

                   

注意:spring MVC 的依赖注入与struts2 是不同的.

spring MVC 的学习资料见附件spring MVC学习笔记.zip

 

Controller 中Action 参数
, User user, 和
@RequestParam(required = false) User user, 
是有区别的.
如果包含@RequestParam ,则无法自动注入对象的成员变量

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值