두 가지 문제가 있습니다.Thymeleaf 확인란이 값을 전달하지 않음
- 사용자 및 메모 클래스가 있습니다. 사용자는 많은 메모를 가질 수 있습니다. Thymeleaf가 사용자에게 속한 모든 이드의 이드를 표시하는 방법은 무엇입니까? th : text = "$ {u.notes.id}"가 작동하지 않습니다.
- 부울 isUserChecked 값을 가진 모든 사용자에 대해 확인란이있는 테이블 (그림 참조)이 있습니다. 아래에 체크 된 사용자를 삭제하는 버튼이 있습니다. Thymeleaf correct는 isUserChecked 값의 상태를 표시합니다. 확인란을 선택하면 삭제 버튼이 작동하지 않지만 코드에서 isUserChecked 값을 설정하면 작동합니다. 문제는이 확인란의 Thymeleaf 구문에 있습니다.
스크린 :
HTML
<div class="container">
<div class="row">
<div class="col-sm-6">
<table class="table table-hover">
<thead>
<tr>
<th>Id</th>
<th>Username</th>
<th>First name</th>
<th>Last name</th>
<th>Password (Hash)</th>
<th>Role</th>
<th>Notes</th>
<th>Select</th>
</tr>
</thead>
<tbody>
<tr th:each="u : ${listOfUsers}">
<td th:text="${u.id}"></td>
<td th:text="${u.username}"></td>
<td th:text="${u.firstName}"></td>
<td th:text="${u.lastName}"></td>
<td th:text="${#strings.substring(u.password,0,5) +'...'}"></td>
<td th:text="${u.role}"></td>
<td th:text="${u.notes}"></td>
<td><input type="checkbox" name="mycheckbox"
th:value="*{u.isUserChecked()}" th:checked="${u.isUserChecked()}" /></td>
</tr>
</tbody>
</table>
<form th:action="@{/users}" method="post">
<button class="buttonLogin" type="submit">Submit</button>
</form>
</div>
</div>
@Metroids 의해 해결할 수있는 제 문제 바와 같이 UPDATE 1
:
,<td><span th:each="note, i: ${u.notes}" th:text="${(i.index > 0 ? ', ' : '') + note.id}" /></td>
두 번째 문제. 내 HTML이를 사용하는 경우 :
<tr th:each="u, i : ${userWrapper}">
<!-- other rows removed for readability -->
<td><input type="checkbox" th:field="*{listOfUsers[__${i.index}__].userChecked}" /></td>
내가 재산 List<User> listOUsers
와 UserWrapper 클래스가 필요합니다. 그러나 이것을하는 방법? 여기
@Component
public class UserWrapper {
@Autowired
UserService userService;
List<User> listOfUsers = userService.findAll();
public List<User> getListOfUsers() {
return listOfUsers;
}
public void setListOfUsers(List<User> listOfUsers) {
this.listOfUsers = listOfUsers;
}
}
이 페이지에 대한 내 컨트롤러 : 나는 이런 식으로 뭔가 만들어 내가 가진이 후
@Controller
public class UserController {
@Autowired
UserService userService;
@Autowired
UserWrapper userWrapper;
@RequestMapping("/users")
public String home(Model model){
List<User> listOfUsers = userService.findAll();
model.addAttribute("listOfUsers", listOfUsers);
return "users";
}
@RequestMapping(value = "users", method = RequestMethod.POST)
public String deleteUser(User user, Model model){
userService.deleteCheckedUser(user);
return "redirect:/users";
}
}
을 오류 :
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController': Unsatisfied dependency expressed through field 'userWrapper'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userWrapper' defined in file [C:\Users\luk89\Desktop\Java\STS Projects\StickyNotes\target\classes\com\twistezo\models\UserWrapper.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.twistezo.models.UserWrapper]: Constructor threw exception; nested exception is java.lang.NullPointerException
업데이트 2
사용자 컨트롤러 :
@Controller
public class UserController {
@Autowired
UserService userService;
@Autowired
UserWrapper userWrapper;
@RequestMapping("/users")
public String home(Model model){
List<User> listOfUsers = userService.findAll();
userWrapper.setListOfUsers(listOfUsers);
for(User u : userWrapper.getListOfUsers()){
System.out.println("username: " +u.getUsername()+ ", checked?: " +u.isUserChecked());
}
model.addAttribute("listOfUsers", listOfUsers);
model.addAttribute("userWrapper", userWrapper);
return "users";
}
@RequestMapping(value = "/users", method = RequestMethod.POST)
public String deleteUser(@ModelAttribute UserWrapper userWrapper, Model model){
for(User u : userWrapper.getListOfUsers()){
System.out.println("username: " +u.getUsername()+ ", checked?: " +u.isUserChecked());
}
userService.deleteCheckedUser(userWrapper);
return "redirect:/users";
}
}
내 서비스 클래스에서
삭제 방법 :
@Override
public void deleteCheckedUser(UserWrapper userWrapper) {
for(User u : userWrapper.getListOfUsers()){
if(u.isUserChecked() == true){
this.userDAO.delete(u.getId());
}
}
}
결과 :
username: user1, checked?: false
username: user2, checked?: false
username: user3, checked?: false
username: user4, checked?: false
username: user5, checked?: false
username: asd, checked?: false
username: qwe, checked?: false
username: xcv, checked?: false
username: ghj, checked?: false
username: dfh, checked?: false
username: n, checked?: false
username: ed, checked?: false
username: null, checked?: true
username: null, checked?: false
username: null, checked?: false
username: null, checked?: false
username: null, checked?: false
username: null, checked?: false
username: null, checked?: false
username: null, checked?: false
username: null, checked?: false
username: null, checked?: false
username: null, checked?: false
username: null, checked?: true
Thymeleaf 부분은 지금 큰 wokrs,하지만 난 POST를 호출 할 때 userWrap에서 내 목록은 값이없는 방법. 나는 방법을 게시하려면
List<User> listOfUsers = userService.findAll(); userWrapper.setListOfUsers(listOfUsers);
사본
을 시도하고 있지만 상황이였습니다 : 사용자 이름 : OK, (모든 값이 거짓)? 마우스 클릭이 체크 박스에 수신하지 않습니다 확인.
감사합니다
컨트롤러 : 실제 체크 박스