这个主题已经存在于堆栈溢出,但我仍然不能理解解决方案,也不能在我的代码中暗示。我对J2EE&Spring是全新的。我对下面的代码有很少的疑问。我尝试了一个示例登录应用程序。在jsp表单中,method=post和controller方法请求method=get。我对这个变体感到困惑(在示例代码中曾这样提到)。如果我移除form:input标记,就可以看到没有输入框的login.jsp页面。在配置文件中,我们需要包含commandName属性?我已经粘贴了控制台、jsp页面、配置文件和java类代码。
login.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<html>
<head>
<title>Cable Vision UserLogin </title>
</head>
<body>
<form:form commandName="loginDetails" id="login" action="login.do" method="post">
<table>
<tr>
<td colspan="3"><h3>Cable Vision UserLogin</h3></td>
</tr>
<tr>
<td><label>UserName</label></td>
<td><form:input path="userName"></form:input></td>
<td><font color="red"><form:errors path="userName"></form:errors></font></td>
</tr>
<tr>
<td><label>Password</label></td>
<td><form:input path="Password"></form:input></td>
<td><font color="blue"><form:errors path="Password"></form:errors></font></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Login"></td>
<td></td>
</tr>
<tr>
<td colspan="3" align="center"><font color="red"><form:errors/></font></td>
</tr>
</table>
</form:form>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>SpringMVC</display-name>
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login.jsp</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>dashboard</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dashboard</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>/WEB-INF/jsp/login.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
11: </tr>
12: <tr>
13: <td><label>UserName</label></td>
14: <td><form:input path="userName"></form:input></td>
15: <td><font color="red"><form:errors path="userName"></form:errors></font></td>
16: </tr>
17: <tr>
Stacktrace:] with root cause
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'loginDetails' available as request attribute
at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:179)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:199)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:165)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java:152)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:143)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:127)
at org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:421)
at org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java:142)
at org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:103)
at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:80)
at org.apache.jsp.WEB_002dINF.jsp.login_jsp._jspx_meth_form_005finput_005f0(login_jsp.java:234)
at org.apache.jsp.WEB_002dINF.jsp.login_jsp._jspService(login_jsp.java:107)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
package com.spring.login.controllers;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.ValidationUtils;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;
import com.spring.login.model.LoginModel;
import com.spring.login.service.LoginService;
@Controller
@RequestMapping(value="/login")
public class LoginController {
private LoginModel loginModel;
@Autowired
private LoginService loginService;
//this method will load the login.jsp when the application starts
@RequestMapping(method=RequestMethod.GET)
public ModelAndView init()
{
loginModel=new LoginModel();
return new ModelAndView("login","loginDetails",loginModel);
}
//this method will be called when we are going to submit the login details
//if this fails, it will be displayed in the same page, in case of success it is redirected to success page
public ModelAndView login(@ModelAttribute("loginDetails")LoginModel loginModel,BindingResult bindingResult,HttpServletRequest request,HttpServletResponse response)
{
try
{
//spring validation utils for checking empty fields
ValidationUtils.rejectIfEmptyOrWhitespace(bindingResult, "userName","userName","Username cannot be empty");
ValidationUtils.rejectIfEmptyOrWhitespace(bindingResult, "passWord","passWord","Password cannot be empty");
if (bindingResult.hasErrors())
{
//returning errors on same page if any errors.
return new ModelAndView("login","loginDetails",loginModel);
}
else
{
//if the userdetails is validated then redirecting to success jsp
//else returning to the same page
if(loginService.validate(loginModel))
{
request.getSession().setAttribute("user",loginModel);
RedirectView redirectView=new RedirectView("Success.do",true);
return new ModelAndView(redirectView);
}
else
{
bindingResult.addError(new ObjectError("Invalid","Invalid Credentials. "+"Username or Password is incorrect. "));
return new ModelAndView("login","loginDetails",loginModel);
}
}
} catch (Exception e)
{
System.out.println("Exception in LoginController "+e.getMessage());
e.printStackTrace();
return new ModelAndView("login","loginDetails",loginModel);
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="com.spring.login"/>
<mvc:annotation-driven/>
<bean id="jspViewResolver"
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>
</beans>
您有一个
/WEB-INF/jsp/login.jsp
这意味着对应用程序上下文根的请求,例如
localhost:8087/LoginForm
将通过
处理,而不经过任何Spring处理。
因此,在处理JSP时,您将没有名为logindetails
的模型(或请求)属性可用。但您的表单
<form:form commandName="loginDetails" id="login" action="login.do" method="post">
@RequestMapping(method=RequestMethod.GET)
public ModelAndView init()
{
loginModel=new LoginModel();
return new ModelAndView("login","loginDetails",loginModel);
}
嘿,我是从Spring开始的,但是我发现了这个异常并且无法解决它这是我的jsp 这是我的控制器 这是个例外
我一直试图提交一个html表单到spring boot,但无法使其工作。 我的pom.xml中有这个 我的application.properties文件中有以下内容: 我还有一个名为index.html的类似html文件,位于 但代码似乎无法识别taglib,因为我在web页面中看到了以下内容: 注意taglib是如何不被识别的,只是打印在页面的顶部? Whitelabel错误页面此应用程序没有
我在使用spring forms标记库创建表单时遇到一个异常 “bean名称'command'的BindingResult和普通目标对象都不能作为请求属性使用” bean类是: controller类是
下面是我的JSP和控制器类,当我在tomcat中运行应用程序时,我遇到了这个异常。
“bean名称'login command'的BindingResult和普通目标对象都不能作为请求属性使用” 这是我新项目的第一个控制器,我在处理xml时遇到了一些问题。我想那都解决了,但如果什么都没看到,我想问题可能就在那里。奇怪的是,所有这些代码几乎都是直接从我的另一个项目复制的,而且它工作得很好。 而且,如果这一点重要的话,我正在运行glassfish。提前道谢! 编辑:网页是/moren
我读过这个错误,但我不知道为什么仍然是不工作的我。希望有人能告诉我这里的错误。 这是我的观点(usuarioneW.jsp): 我的控制器:
我看过很多类似的帖子,但没有任何东西对我起作用。所以我会把它和我的代码样例一起再次发布。我是Spring MVC的新手,正在尝试使用一个简单的登录表单。但是我一次又一次地得到“BindingResult和bean名称'login form'的普通目标对象都不能作为请求属性”。下面是具有登录表单的index.jsp文件: index.jsp UserController如下所示:UserContro