Java 如何将用户添加到团队管理页面

Java 如何将用户添加到团队管理页面,java,spring,thymeleaf,Java,Spring,Thymeleaf,我不明白如何在管理页面上实现向团队添加用户。 我在控制器中编写了add方法,我不明白如何在界面中显示它。 需要两个列表,一个是所有团队的列表,另一个是所有用户的列表,然后保存? 开始学习百里香和很多奇怪的东西 admin.html </head> <body> <h1>Admin page </h1> <!-- <form action="#" th:action="@{/admin}" th:ob

我不明白如何在管理页面上实现向团队添加用户。 我在控制器中编写了add方法,我不明白如何在界面中显示它。 需要两个列表,一个是所有团队的列表,另一个是所有用户的列表,然后保存? 开始学习百里香和很多奇怪的东西

admin.html

 </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;
}