Java 如何将用户添加到团队管理页面
我不明白如何在管理页面上实现向团队添加用户。 我在控制器中编写了add方法,我不明白如何在界面中显示它。 需要两个列表,一个是所有团队的列表,另一个是所有用户的列表,然后保存? 开始学习百里香和很多奇怪的东西 admin.htmlJava 如何将用户添加到团队管理页面,java,spring,thymeleaf,Java,Spring,Thymeleaf,我不明白如何在管理页面上实现向团队添加用户。 我在控制器中编写了add方法,我不明白如何在界面中显示它。 需要两个列表,一个是所有团队的列表,另一个是所有用户的列表,然后保存? 开始学习百里香和很多奇怪的东西 admin.html </head> <body> <h1>Admin page </h1> <!-- <form action="#" th:action="@{/admin}" th:ob
</head>
<body>
<h1>Admin page </h1>
<!--
<form action="#" th:action="@{/admin}" th:object="${team}" method="post">
<p>Add Team: <input type="text" th:field="*{name}" /></p>
<p><input type="submit" value="addTeam" />
</form>
-->
<form th:action="@{/logout}" method="post">
<input type="submit" value="Sign Out"/>
</form>
</body>
</html>
团队
实体
@表(name=“team”)
公开课小组{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
长id;
@纵队
字符串名;
@纵队
字符串url;
@高球
@列(name=“avatar”,nullable=true,columnDefinition=“BLOB”)
字符串化身;
@OneToMany(mappedBy=“team”,cascade=CascadeType.ALL,orphan=true)
@杰索尼奥雷
Set users=new HashSet();
公共团队(){
}
准备好
管理员控制器
@控制器//RestController
公共类管理员控制器{
.....
@GetMapping("/admin/team")
List<Team> allTeams() {
return teamRepository.findAll();
}
@RequestMapping(value = "/admin/team/{id}/user/{email}", method = RequestMethod.POST,produces = { MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE })
public Users addUserToTeam(
@PathVariable long id,@PathVariable String email) {
Team team = teamRepository.findById(id).orElseThrow(() -> new NoSuchTeamException("Team not found"));
Users user = userRpRepository.findById(email).orElseThrow(() -> new NoSuchUserException("User not found"));
user.setTeam(team);
user = userRpRepository.save(user);
return user;
@RequestMapping(value = "/admin", method = RequestMethod.GET)
public String adminPage(Model model) {
model.addAttribute("admin",new Team());
return "admin";
}
}
。。。。。
@GetMapping(“/admin/team”)
列出所有团队(){
返回teamRepository.findAll();
}
@RequestMapping(value=“/admin/team/{id}/user/{email}”,method=RequestMethod.POST,products={MediaType.APPLICATION\u JSON\u value,MediaType.APPLICATION\u XML\u value})
公共用户addUserToTeam(
@PathVariable长id,@PathVariable字符串电子邮件){
Team Team=teamRepository.findById(id).orelsethorn(()->new NoSuchTeamException(“未找到团队”);
Users user=userRpRepository.findById(email.orelsetrow(()->new NoSuchUserException(“未找到用户”);
user.settam(团队);
user=userRpRepository.save(用户);
返回用户;
@RequestMapping(value=“/admin”,method=RequestMethod.GET)
公共字符串adminPage(模型){
addAttribute(“admin”,new Team());
返回“admin”;
}
}
从RMDB结构的角度来看,更好的方法是在用户和团队之间创建链接表
使用者
使用此结构,您可以为团队获取所有用户,为用户获取所有团队。集合是惰性的,因此您需要使用@Transactional,例如,用于适当的服务方法
这个结构是双向的:如果您将新用户添加到团队对象中的users集合中,JPA将创建新用户。但是…链接表包含一个更多必填字段
role\u id
,所以在这样的添加中您将得到一个异常。所以最好先创建用户和团队对象,然后使用req创建UserTeam链接对象uired角色(或设置默认角色,所有新对象都将使用此角色创建)。从RMDB结构的角度来看,更好的方法是在用户和团队之间创建链接表
使用者
使用此结构,您可以为团队获取所有用户,为用户获取所有团队。集合是惰性的,因此您需要使用@Transactional,例如,用于适当的服务方法
这个结构是双向的:如果您将新用户添加到团队对象中的users集合中,JPA将创建新用户。但是…链接表包含一个更多必填字段
role\u id
,所以在这样的添加中您将得到一个异常。所以最好先创建用户和团队对象,然后使用req创建UserTeam链接对象uired角色(或设置默认角色,所有新对象都将使用此角色创建)。看一看。Petclinic是学习如何创建“经典”的良好起点spring服务器端渲染应用程序工作正常。它使用spring Boot 2.2和thymeleaf。您的问题是如何回答它;您的帖子应该返回一个新的视图或重定向到GET,并且不应该返回用户实体。我希望在管理页面上选择一个已经存在的用户并选择团队。Th通过点击添加按钮,我将这个用户添加到这个团队。看看。Petclinic是一个学习如何成为“经典”的好起点spring服务器端渲染应用程序工作正常。它使用spring Boot 2.2和thymeleaf。您的问题是如何回答它;您的帖子应该返回一个新的视图或重定向到GET,并且不应该返回用户实体。我希望在管理页面上选择一个已经存在的用户并选择团队。Th通过单击add按钮,我将此用户添加到此团队。
Entity
@Table(name="team")
public class Team {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;
@Column
String name;
@Column
String url;
@Lob
@Column(name = "avatar",nullable = true,columnDefinition="BLOB")
String avatar;
@OneToMany(mappedBy="team",cascade = CascadeType.ALL, orphanRemoval = true)
@JsonIgnore
Set<Users> users = new HashSet<>();
public Team() {
}
get und set
.....
@GetMapping("/admin/team")
List<Team> allTeams() {
return teamRepository.findAll();
}
@RequestMapping(value = "/admin/team/{id}/user/{email}", method = RequestMethod.POST,produces = { MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE })
public Users addUserToTeam(
@PathVariable long id,@PathVariable String email) {
Team team = teamRepository.findById(id).orElseThrow(() -> new NoSuchTeamException("Team not found"));
Users user = userRpRepository.findById(email).orElseThrow(() -> new NoSuchUserException("User not found"));
user.setTeam(team);
user = userRpRepository.save(user);
return user;
@RequestMapping(value = "/admin", method = RequestMethod.GET)
public String adminPage(Model model) {
model.addAttribute("admin",new Team());
return "admin";
}
}
@Entity
@Table(name = "user")
public class User {
@Id
@Column(name = "email", length = 200) //@Id controls nullable and unique
private String email;
@Column(name = "name", nullable = false, length = 200)
private String name;
@Column(name = "password", nullable = false, length = 128)
@JsonIgnore
private String password;
@Column(name = "avatar", nullable = true)
private String avatar;
@ManyToMany(cascade = CascadeType.ALL) //by default fetch - LAZY
@JoinTable(name = "user_team", joinColumn = @JoinColumn(name = "user_id",
foreignKey = @ForeignKey(name = "fk_user_team__user"), nullable = false),
inverseJoinColumns = @JoinColumn(name = "team_id",
foreignKey = @ForeignKey(name = "fk_user_team_team"), nullable = false))
private Set<Team> teams;
}
@Entity
@Table(name = "team")
public class Team {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String name;
@Column
private String url;
@Lob
@Column(name = "avatar", nullable = true, columnDefinition = "BLOB")
private String avatar;
@ManyToMany(cascade = CascadeType.ALL) //by default fetch - LAZY
@JoinTable(name = "user_team", joinColumn = @JoinColumn(name = "team_id",
foreignKey = @ForeignKey(name = "fk_user_team__team"), nullable = false),
inverseJoinColumns = @JoinColumn(name = "user_id",
foreignKey = @ForeignKey(name = "fk_user_team_user"), nullable = false))
private Set<User> users;
}
@Entity
@Table(name = "user_team", uniqueConstraints =
@UniqueConstraints(columnNames = {"user_id", "team_id"}, name = "uniq_some")
public class UserTeam {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; //it's easier to create new Long Id key then composite key with user_id and team_id
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id", foreignKey = @ForeignKey(name = "fk_user_team__user"), nullable = false)
private User user;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "team_id", foreignKey = @ForeignKey(name = "fk_user_team__team"), nullable = false)
private Team team;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "role_id", nullable = false) //I don't see Role entity but think it has id field
@JsonIgnore
private Role role;
}