【发布时间】:2020-10-09 07:36:04
【问题描述】:
我在尝试了解如何通过 Spring Boot Hibernate 编辑配置文件时遇到了一些麻烦。请注意,此项目不包括 thymeleaf 或 spring security。
我正在尝试获取已登录的用户并获取他的电子邮件实例,以便能够在名为 editProfile.jsp 的 JSP 中对其进行更新。我的欢迎页面上的 My Profile 链接应该获取登录用户的信息并将您带到 editProfile jsp,用户可以在其中编辑信息和更新信息。 到目前为止,我已经尝试了一些方法,但似乎都没有。
我不断收到此堆栈跟踪
There was an unexpected error (type=Internal Server Error, status=500).
Neither BindingResult nor plain target object for bean name 'accountForm' available as request attribute
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'accountForm' available as request attribute
at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:153)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:178)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:199)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:164)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:123)
at org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:460)
at org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java:357)
at org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:87)
at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:83)
at org.apache.jsp.WEB_002dINF.jsp.editProfile_jsp._jspx_meth_form_005finput_005f0(editProfile_jsp.java:353)
at org.apache.jsp.WEB_002dINF.jsp.editProfile_jsp._jspx_meth_form_005fform_005f0(editProfile_jsp.java:285)
at org.apache.jsp.WEB_002dINF.jsp.editProfile_jsp._jspService(editProfile_jsp.java:236)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:384)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:171)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:316)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1373)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1118)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1057)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:834)
我以为我已经设置好了所有东西,但显然我没有,所以我决定在这里发布我的问题。
这是我的欢迎页面的图片,因此您可以大致了解我在说什么,右上角的“我的个人资料”链接应该将我带到 editProfile.jsp。您还可以看到,我能够成功添加登录用户名并将其从登录控制器输出到欢迎页面
这是welcome.jsp
<header id = bal>
<input type="image" src="images/nav_logo.PNG" name="nav" class="btSubmit" id="nav" />
<nav>
<ul id = nav__links>
<li><a style = 'text-decoration: none' href = > Testing Center </a> </li>
<li><a style = 'text-decoration: none' href = > Donation Center </a></li>
<li> <a style = 'text-decoration: none' href = 'https://www.youtube.com/' > Shop </a></li>
<li><a style = 'text-decoration: none' href = "/welcome/edit/${firstName.email}"> My Profile </a></li>
</ul>
</nav>
</header>
<body>
<p> Welcome, ${firstName.firstName} ${firstName.lastName}</p>
<div class = grid>
<div id = card1>
<h1 class = headstuff>Welcome!</h1>
<p id=" divider1">Practice social distancing by putting space
between yourself and others. Continue to practice healthy habits,
like washing your hands for at least twenty seconds and staying home if you are sick,
to help slow the spread of <a href = https://www.cdc.gov/coronavirus/2019-ncov/index.html style="color:#817ffe;">#COVID19</a>.</p>
<button id = butt1>Resources</button>
<button id = butt2>Self-check</button>
</div>
</div>
<div class = grid id = g2>
<div class = card2>
<img class = icon src="images/world.png" >
<h2 style = 'display: inline-block' class=" sechead"> Global News</h2>
<p class = pnew>
Since the beginning of the pandemic, accelerating the development of and equitable access to vaccines,
diagnostics and therapeutics for COVID-19 has been a priority for WHO.
Already, we have made remarkable progress.
</p>
<form action="/news">
<input type="submit" class=butt3 value="View"/>
</form>
</div>
<div class = card3>
<img class = icon src="images/flag.png" >
<h2 style = 'display: inline-block' class=" sechead"> US News</h2>
<p class = pnew>Since the beginning of the pandemic, accelerating the development of and equitable access to vaccines,
diagnostics and therapeutics for COVID-19 has been a priority for WHO.
Already, we have made remarkable progress.
</p>
<form action="/news">
<input type="submit" class=butt3 value="View"/>
</form>
</div>
<div class = card4>
<img class = icon src="images/cap.png" id = icon>
<h2 style = 'display: inline-block' class=" sechead" id = cardt> Georgia News</h2>
<p class = pnew id = pn>Since the beginning of the pandemic, accelerating the development of and equitable access to vaccines,
diagnostics and therapeutics for COVID-19 has been a priority for WHO.
Already, we have made remarkable progress.
</p>
<form action="/news">
<input type="submit" class=butt3 value="View"/>
</form>
</div>
<div class = card5>
<img class = icon src="images/bulld.png" id = ic4>
<h2 style = 'display: inline-block' class=" sechead" > Athens News</h2>
<p class = pnew>Since the beginning of the pandemic, accelerating the development of and equitable access to vaccines,
diagnostics and therapeutics for COVID-19 has been a priority for WHO.
Already, we have made remarkable progress.
</p>
<form action="/news">
<input type="submit" class=butt3 value="View"/>
</form>
</div>
</div>
</body>
</html>
这是我的登录控制器,看看我如何将数据从登录控制器传递到 welcome.jsp
@RequestMapping(value = "/login", method = RequestMethod.POST)
public Object submitLoginIn(@ModelAttribute("login") AccountEntity accountForm, Model model) {
AccountEntity accountInstance = accountRepo.findByEmail(accountForm.getEmail().toLowerCase());
// Password Verifier using Argon2
Argon2PasswordEncoder argon2PasswordEncoder = new Argon2PasswordEncoder();
boolean passwordMatch = argon2PasswordEncoder.matches(accountForm.getPassword(), accountInstance.getPassword());
// issue where if i use caps email, throws null pointer exception
if (accountInstance == null || !passwordMatch) {
System.out.println("Invalid Email or Password");
// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
return "login";
} else if (accountInstance.isEnabled() == false) {
System.out.println("Cant login cause not verified");
return "login";
} else {
System.out.println("account exist");
model.addAttribute("firstName", accountInstance);
return "welcome";
}
}
}
这是我的欢迎控制器,这可能是问题所在,但我完全是空白
@Controller
public class WelcomeController {
AccountRepository accountRepo;
@RequestMapping(value = "/welcome", method = RequestMethod.GET)
public String showWelcmPage(Model model) {
return "welcome";
}
@RequestMapping(value = "welcome/edit/{email}", method = RequestMethod.GET)
public String getEditUserData(@PathVariable("email") String email, Model model, AccountEntity accountForm) {
model.addAttribute("accountEmail", email);
return "editProfile";
}
@RequestMapping(value = "editProfile", method = RequestMethod.GET)
public String showEditProfilePage(Model model, AccountEntity accountForm) {
model.addAttribute("email", accountForm.getEmail());
model.addAttribute("password", accountForm.getPassword());
return "editProfile";
}
@RequestMapping(value = "editProfile", method = RequestMethod.POST)
public String sendEditProfilePage(@ModelAttribute("accountForm") AccountEntity accountForm, Model model) {
AccountEntity accountInstance = accountRepo.findByEmail(accountForm.getEmail());
accountInstance.setEmail(accountForm.getEmail());
accountInstance.setPassword(accountForm.getPassword());
accountRepo.save(accountForm);
return "editProfile";
}
// @RequestMapping(value = "editProfile/{email}", method = RequestMethod.GET)
// public String Data(@PathVariable("email") String email, Model model) {
// AccountEntity accountInstance = accountRepo.findByEmail(email);
// model.addAttribute("accountForm", accountInstance);
// return "editProfile";
// }
}
最后但并非最不重要的是我的 AccountEntity
@Entity(name = "user")
public class AccountEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String firstName;
private String lastName;
private String userName;
private String email;
private String password;
// private String gender;
private Integer age;
private Date createdDate;
private boolean enabled;
@Column(updatable = false)
private String verificationCode;
// Getters and Setters
public void setId(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
/*
* public String getGender() { return gender; }
*
* public void setGender(String gender) { this.gender = gender; }
*/
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getVerificationCode() {
return verificationCode;
}
public void setVerificationCode(String verificationCode) {
this.verificationCode = verificationCode;
}
public Date getCreatedDate() {
return createdDate;
}
public void setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
}
【问题讨论】:
标签: spring spring-boot jsp crud