我通常使用JAX-RS REST服务,我必须使用Spring MVC对webapp进行一些更改,我只是表面上熟悉(MVC部分,而不是Spring)。
我有一个允许用户创建新用户的视图。提交表单时,页面只是“空白”,而不是在Spring MVC控制器中执行相应的操作,而不是转发到不存在的视图。
我不清楚这里要找什么。也许我可以启用一些日志记录来显示Spring做出的请求映射决策?
我会尝试在这里显示相关的代码片段。
在具有user / password / name字段形式的jsp页面中,有类似这样的内容:
<a href="#" onclick="validateUserCredentials();return false;" class="button">Create User</a>
我在“validateUserCredentials()”中设置了一个断点,它对输入字段进行了一些简单的验证:
function validateUserCredentials(){
var inputPassword=/[a-zA-Z0-9_-]{4,14}/ ;
var inputUsername=/[a-zA-Z0-9_-]{4,14}/ ;
var error ="false";
if (document.f.password.value.search(inputPassword)==-1)
{
error="true";
}else if (document.f.username.value.search(inputUsername)==-1){
error="true";
}else if (document.f.fullname.value.length==0){
error="true";
}else if (document.f.displayName.value.length==0){
error="true";
}
if(error =="true"){
document.f.action="/account/createuser?error=true";
document.f.submit();
}else{
document.f.action="/account/createuser";
document.f.submit();
}
}
以下是控制器的摘录:
@Controller
@SessionAttributes(value= {"userRoleMap", "userStatusMap"})
public class AccountController {
private static Logger logger = LogManager.getLogger(AccountController.class);
@Autowired
private UserAccountService accountService;
@RequestMapping(value = "/account/getCurrentUsers", method = RequestMethod.GET)
public ModelAndView getCurrentUsers(ModelMap model) {
logger.debug("In getCurrentUsers.");
List<UserInfo> userInfoList =accountService.getCurrentUserList();
Users users = new Users();
users.setUserInfoList(userInfoList);
HashMap<String,String> userRoleMap=populateAndGetUseridRoleMap(userInfoList);
HashMap<String,Boolean> userStatusMap=populateAndGetUseridStatusMap(userInfoList);
model.addAttribute("userRoleMap",userRoleMap);
model.addAttribute("userStatusMap",userStatusMap);
return new ModelAndView("userRole","users",users);
}
@RequestMapping(value = "/account/createuser", method = RequestMethod.GET)
public String getCreateUserPage() {
logger.debug("In getCreateUserPage.");
return "createUser";
}
@RequestMapping(value = "/account/createuser", method = RequestMethod.POST)
public String createUser(@RequestParam("username") String newUser,@RequestParam("password") String password,
@RequestParam("role") String role,
@RequestParam("fullname") String fullname,
@RequestParam("displayName") String displayName,
@RequestParam(value="error", required=false) boolean error,ModelMap model) {
logger.debug("In createUser. newUser[" + newUser + "] password[" + password + "] role[" + role +
"] fullname[" + fullname + "] displayname[" + displayName + "] error[" + error +
"] model[" + model + "]");
当我点击提交按钮时,页面只是“空白”。在提交之前,网址位于“/ account / createuser”,并且在提交后它没有更改。
当我查看日志时,我只看到了这个:
controllers.AccountController (AccountController.java:73) - In getCurrentUsers.
controllers.AccountController (AccountController.java:104) - In getCreateUserPage.
它似乎没有进入“createUser”方法。
更新:
我之前在日志中也注意到以下几行:
org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.registerHandlerMethod Mapped "{[/account/createuser],methods=[POST],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String ...AccountController.createUser(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,boolean,org.springframework.ui.ModelMap)
答案 0 :(得分:0)
这只是因为jsp页面中的一些应用程序链接是&#34; raw&#34;相对引用,而不是使用&#34;