当前位置: 首页 > 知识库问答 >
问题:

如何将session属性传递给ThymeLeaf表单字段以保存到数据库中

祁正浩
2023-03-14

我有一个Thymeleaf表单,当用户登录时,它会将数据发送到数据库表。ThymeLeaf模板能够从其分配的控制器捕获登录用户的会话。将数据保存到数据库时。

我需要将表单数据与捕获的会话用户名一起提供,以便所述会话用户名也保存在数据库表中。但是我得到一个错误

组织。springframework。豆。NotReadablePropertyException:bean类[com.example.jobonics.Persistence.model.NewJobs]的无效属性“userName”:bean属性“userName”不可读或具有无效的getter方法:getter的返回类型是否与setter的参数类型匹配?

我有一个控制器,它可以选择用户会话并将其发送到thymeleaf模板,还有一个隐藏的输入用户字段,它保存来自控制器的会话对象。为了清晰起见,我的代码粘贴在下面:

@RequestMapping(value = "/new_job", method = RequestMethod.GET)
public String newRegistration(ModelMap model) {
    NewJobs newJobs = new NewJobs();
    Authentication auth = SecurityContextHolder.getContext().getAuthentication();
    ServletRequestAttributes attr = (ServletRequestAttributes)
    RequestContextHolder.currentRequestAttributes();

   //extract user session from HttpSession
    HttpSession session = attr.getRequest().getSession(true);
    //initialize user service to get authenticated user
    User user = userService.findUserByEmail(auth.getName());

    model.addAttribute("newjobs", newJobs);
    //add session captured name as attribute to view
    model.addAttribute("userName", "Welcome " + user.getFullName() + "");
    return "new_job";

@RequestMapping(value = "/save", method = RequestMethod.POST)
public String saveRegistration(@Valid NewJobs newJobs, BindingResult result, 
ModelMap model,
        RedirectAttributes redirectAttributes) {
    if (result.hasErrors()) {
     System.out.println("has errors");
        return "new_job";
    }

    NJS.save(newJobs);


    return "redirect:/new_job";
}
}

我的控制器

<form class="form-horizontal" th:action="@{/save}" th:object="${newjobs}" method="post">

<div class="form-group">
    <div class="col-sm-7">
        <input type="text" class="form-control" th:value="*{userName}" style="display:none">
    </div>
</div>

新工作

@Entity
@Table(name = "newjobs")
public class NewJobs {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int job_id;

@Column(name = "Employer")
private String Employer;

@Column(name = "JobTitle")
@NotEmpty(message = "Please provide the job title")
private String jobTitle;

@Column(name = "job_summary", length = 1000)
private String jobSummary;

@Column(name = "job_description", length = 1000)
private String jobDescription;

@Column(name = "location")
private String Location;

@Column(name = "career_level")
@NotEmpty(message = "Please provide career level required")
private String careerLevel;

@Column(name = "industry")
private String industry;

@Column(name = "profession")
@NotEmpty(message = "Please provide the profession")
private String profession;

@Column(name = "jobtype")
@NotEmpty(message = "Please provide your job type")

private String jobType;
@Column(name = "min_experience")
@NotEmpty(message = "Please provide the Min years of experience")

private String minExperience;
@Column(name = "min_qualification")
@NotEmpty(message = "Please provide the Min Qualifications")
private String minQualification;

@Column(name = "salary")
@NotEmpty(message = "Please provide the salary")
private String salary;

@Column(name = "deadline_date")
@NotEmpty(message = "Please provide the Applications Deadline")
private String deadlineDate;

@Column(name = "created_at", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP", insertable = false, nullable = false)
private Date created_at;
}`

我的预期输出是将登录的用户会话对象作为提交表单的一部分发送到db。我可以做些什么来纠正上述错误?

共有1个答案

马沛
2023-03-14

我认为错误在于你的用户名来自错误的位置:
th:value=“*{username}”meannewjobs。用户名
但在控制器中,您没有将用户名设置为新作业,而是设置为模型属性

让我们在控制器中更改代码(使用额外的getter)
newjobs。setUserName(“欢迎”user.getFullName())

或者
th:value=“${userName}”$但不是*

注:
https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#expressions-关于星号语法

不过有一个重要的区别:星号语法计算选定对象上的表达式,而不是整个上下文上的表达式。也就是说,只要没有选定的对象,美元和星号语法就完全相同。

 类似资料:
  • 在使用PingFederate进行单点登录期间,我需要将数据从一个系统传递到另一个系统。 目前我的链接如下所示: 目标资源,解码,如下所示: pingfederate处理请求后,它最终会向其他公司发送一封邮件,将整个TargetResource复制到RelayState、params和all中: 我的目标是以某种方式将 paramOne 和 paramTwo 传递到 SAML 属性中,但不要将这些

  • 这是使用PHP将数据从(HTML)表单保存到MySQL数据库的规范问答。 如果您正在尝试执行以下操作,则此操作适用于您: 接受HTML表单上的用户输入 使用PHP脚本处理输入 将所述输入存储到MySQL数据库中。 过去提出的不应使用的类似问题的例子: 连接PHP代码并将表单提交到mySQL数据库 使用PHP/html表单插入mySQL-不工作 如何使用PHP将html表单数据传递到mySQL db

  • 是否可以通过context将对象(比方说User(包含3个字符串属性-name、password、detail)传递给thymeleaf模板,并从模板中访问它的属性,例如 ? 如果是这样,我该怎么做? 匿名用户 如果你正在使用spring和thymeleaf,那么它们应该像魅力一样为你工作。在这种情况下,它非常简单: 其中myTemplate引用,其内容如下所示: 和我的实体 和我使用的沉香酒的版

  • 我有一个表单来获取用户的数据。目标是将表单数据作为对象传递给Api。表格如下。 如何将表单数据作为对象传递给Api函数?

  • 因此,在我的Javascript中,我使用的是表单序列化,输出是正确的 (issubmit=1) 当我试图将其传递给我的控制器时,我什么也得不到,。我做错了什么? Jquery: 控制器:

  • 我需要你的帮助。我试图在没有反序列化的情况下找到解决方案,但我什么也没找到。如果你能帮我就好了...所以我有了下面的JSON文件 谢谢你的时间和帮助。 我有以下错误: