我不明白如何在管理页面上实现向团队添加用户。我在控制器中编写了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>
用户
@Entity
@Table(name="users")
public class Users {
@Id
@Column(name="email",unique = true, nullable = false,length = 200)
String email;
@Column(name="name",nullable = false,length = 200)
String name;
@Column(name="password",nullable = false,length = 128)
@JsonIgnore
String password;
@Column(name = "avatar", nullable = true)
String avatar;
@ManyToOne
@JoinColumn(name="team_id", nullable=true)
Team team;
@ManyToOne
@JoinColumn(name="role", nullable=false)
@JsonIgnore
Role role;
public Users() {
}
get und set
}
团队
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
管理员控制器
@控制器//RestController公共类AdminController{
.....
@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";
}
}
从RMDB结构来看,更好的方法是在用户和团队之间创建链接表。
用户
@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;
}
通过这种结构,您可以为团队获取所有用户,并为用户获取所有团队。集合是惰性的,因此您需要使用@Transactional,例如,用于适当的服务方法。
这种结构是双向的:如果您在Team对象中向用户集合中添加新用户,JPA将创建新用户。但是...链接表包含一个额外的必需字段role_id
,所以在这样的添加中您将获得一个异常。所以最好先创建用户和团队对象,然后创建具有所需角色的UserTeam链接对象(或者设置默认角色,所有新对象都将使用该角色创建)。
5.3 将内部账户添加到账户管理器 账户管理器是 Android OS 的系统,它集中管理帐户信息,是应用访问在线服务和认证令牌所必需的(帐户名称,密码)。 用户需要提前将账户信息注册到账户管理器,当应用尝试访问在线服务时,账户管理器在获得用户权限后,会自动提供应用认证令牌。 账户管理器的优势在于,应用不需要处理极其敏感的信息和密码。 使用账户管理器 的账户管理功能的结构如下图 5.3-1 所示。
我设法改变了一个玩家的皮肤和它的名字。但是现在我有了一个新问题:我和记分牌团队一起为玩家列表和开销名称工作。现在我把假玩家的名字添加到团队中。它头上的名字变成了“§a”名字,但是在标签列表中,有一个假玩家的白色名字。每个玩家都可以看到,这是一个假玩家。
问题内容: 我有一个运行着某些进程(uwsgi和celery)的docker容器。我想为这些进程以及它们都属于的工作组创建一个celery用户和uwsgi用户,以便分配权限。 我尝试将和添加到我的Dockerfile中,但这会引起问题,因为这些命令会提示您输入(我已在下面的构建中发布了响应)。 将用户添加到Docker容器以便为在该容器中运行的工作人员设置权限的最佳方法是什么? 我的Docker映
我正试图在我的注册功能中为用户分配一个角色。 通过使用以下代码: 当我试图运行上面的代码时,我得到了以下错误。 E/AndroidRuntime:致命异常:AsyncTask#2进程:info,pid:967 java.lang.runtimeException:在Android.os.AsyncTask$3处执行doInBackground()时发生错误。done(AsyncTask.java:
问题内容: 如何使用itext从html源向pdf添加标头? 当前,我们扩展了PdfPageEventHelper并覆盖了这些方法。工作正常,但是当我进入2个以上页面时,它将引发RuntimeWorkerException。 问题答案: 通常, 禁止 在事件中添加内容。这是 禁止 添加内容到的对象。您应该使用而 不是 文档在方法中添加页眉和页脚。此外:通过一遍又一遍地解析HTML,您正在浪费大量C
问题内容: 我在将新的简单XWPFTable添加到XWPFHeader(或Footer)时遇到了严重的麻烦。不幸的是,似乎只有一个人遇到相同的问题(https://bz.apache.org/bugzilla/show_bug.cgi?id=57366#c0)。 有谁有办法实现这一目标? 任何帮助将不胜感激! 亲切的问候… 〜丹尼尔 问题答案: 这可以使用公共XWPFTable insertNew