gpt4 book ai didi

java - 从 JPA 嵌入表中的 POST 访问表单数据

转载 作者:行者123 更新时间:2023-12-01 09:15:43 26 4
gpt4 key购买 nike

我正在使用 JPA 来运行 Spring MVC 应用程序以实现持久性。我有一个带有更新按钮的表单。单击此按钮时,它应该更新数据库中的用户记录。 User 表中有一个嵌入表Address。我可以访问用户表中的所有字段,但不能访问嵌入表。这是我的请求映射

@RequestMapping(value="/user/{userid}",method=RequestMethod.POST)
public String Update(@ModelAttribute("user")User user,@PathVariable("userid") String userid,Model model){

这是我的 User.java

@Entity
@Table(name="User")
public class User {
@Id
@Column(name = "userid")
private String id;
@Column(name="firstname")
private String firstname;
@Column(name="lastname")
private String lastname;
@Column(name="title")
private String title;
@Embedded
private Address address;
@ManyToMany
@JoinTable(name="phone_user", joinColumns={@JoinColumn(name="userid")},
inverseJoinColumns={@JoinColumn(name="phoneid")})
private List<Phone> phones;

public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}

public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}

public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}

public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}

public List<Phone> getPhones() {
return phones;
}
public void setPhones(List<Phone> phones) {
this.phones = phones;
}

}请注意地址字段的@Embedded 标记。这是我的 Address.java

@Embeddable
public class Address {
String street;
String city;
String state;
String zip;
@Column(name="street")
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
@Column(name="city")
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
@Column(name="state")
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
@Column(name="zip")
public String getZip() {
return zip;
}
public void setZip(String zip) {
this.zip = zip;
}


}

这是我的 JSP,它发送表单数据

<html>
<head>
<title>Home</title>

</head>
<body>
<h1>
Hello world!
</h1>



<form method="POST" action="/cmpe275/user/${userid}">
<table>
<tr>
<td>Name</td>
<td><input type="text" readonly="readonly" name="userid" value="${id}"/></td>
</tr>
<tr><tr><tr><tr><tr><tr><tr><tr><tr>
<td>First Name</td>
<td><input type="text" name="firstname" value="${firstname}"/></td>
<td>Last Name</td>
<td><input type="text" name="lastname" value="${lastname}"/></td>
</tr>
<tr>
<tr><tr><tr><tr>
<td>Street</td>
<td><input type="text" name="street" value="${street}"/></td>
<td>City</td>
<td><input type="text" name="city" value="${city}"/></td>
<td>State</td>
<td><input type="text" name="state" value="${state}"/></td>
<td>Zip</td>
<td><input type="text" name="zip" value="${zip}"/></td>
</tr>
<tr><tr><tr><tr>
<td><input type="submit" onclick="updateUser();" name="Update" value="Update"/></td>

<td><input type="button" name="Delete" value="Delete"/></td>



</table>
</form>
</body>
<script>
function updateUser(){
console.log("hi");
}

</script>
</html>

我无法使用 getter/setter 访问地址字段。例如 - 在我的处理程序映射中 - 要获取更新后的配置文件的名字,我可以使用以下方式访问它:

user.getFirstName()

但是如果我想访问更新后的地址,我会执行

user.getAddress.getCity()

我得到一个空值。知道为什么吗?

最佳答案

我认为是这样

<td><input type="text"  name="street" value="${street}"/></td>
<td>City</td>
<td><input type="text" name="city" value="${city}"/></td>
<td>State</td>
<td><input type="text" name="state" value="${state}"/></td>
<td>Zip</td>
<td><input type="text" name="zip" value="${zip}"/></td>

应该是

<td><input type="text"  name="address.street" value="${address.street}"/></td>
<td>City</td>
<td><input type="text" name="address.city" value="${address.city}"/></td>
<td>State</td>
<td><input type="text" name="address.state" value="${address.state}"/></td>
<td>Zip</td>
<td><input type="text" name="address.zip" value="${address.zip}"/></td>

Spring Controller 期望 @ModelAttribute@RequestBody 的结构类似于 POJO。因此,如果您不使用表单并发送此数据与一些 js,它看起来像

{ 
'firstname':'peter',
'lastname': 'griffen',
'address': {
'street':'31 Spooner Street'
}
}

你得到的是完全平坦的物体。如果您在 User 类中添加正确的 setter ,这可能会起作用。

关于java - 从 JPA 嵌入表中的 POST 访问表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40558539/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com