Как отобразить детали объекта от текущего зарегистрированного пользователя - PullRequest
0 голосов
/ 23 сентября 2018

Я хочу создать страницу с информацией о текущем зарегистрированном пользователе и редактировать их.Но когда я хочу показать детали, я получил ошибку:

org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'username' cannot be found on null

userDetails.html

<span th:text="${oneUser.username}"> username: </span>
<span th:text="${oneUser.password}"> password: </span>
<span th:text="${oneUser.email}"> email: </span>

Я попытался изменить на:

<span th:text="${oneUser == null ? ' ' : oneUser.username}"> username: </span>

но у меня есть только страница, на которой ничего не отображается без ошибок

UserController.java

@GetMapping("/registerUser")
public String home(Model model) {
model.addAttribute("userNew", new User());
return "registerUser";
}

@GetMapping("/userDetails")
public String show(@ModelAttribute User details, Model modelDetals) {
final String currentUserName = SecurityContextHolder.getContext().getAuthentication().getName();
details = userRepository.findByUsername(currentUserName);
modelDetals.addAttribute("oneUser", details);
return "userDetails";
}

UserRepository.java

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

    User findByEmail(String email);
    User findByUsername(String username);
}

User.java

@Entity
@Table(name = "users")
public class User implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_user")
    private Long id;
    @Column(name = "login", nullable = false, unique = true)
    private String username;
    @NotEmpty
    private String password;
    @NotEmpty
    private String email;

    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "id_details")
    private UserDetails details;

    @ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
    private Set<UserRole> roles = new HashSet<>();

    @OneToMany
    private List<Order> orders;

    public User() {
    }

    public User(String username, String password, String email) {
        this.username = username;
        this.password = password;
        this.email = email;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public UserDetails getDetails() {
        return details;
    }

    public void setDetails(UserDetails details) {
        this.details = details;
    }

    public List<Order> getOrders() {
        return orders;
    }

    public void setOrders(List<Order> orders) {
        this.orders = orders;
    }

    public Set<UserRole> getRoles() {
        return roles;
    }

    public void setRoles(Set<UserRole> roles) {
        this.roles = roles;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", password=" + password + ", email=" + email
                + ", details=" + details + orders.size() + ", orders=" + orders + "]";
    }
}

Второй вопрос: как оперировать этими деталями.Я имею в виду, например, у меня есть вторая страница для редактирования деталей.Как получить текущего зарегистрированного пользователя и изменить эти данные, используя UserRepository.java, чтобы сохранить пользователя с новыми данными, предварительно получая имя пользователя, как в этом случае?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...