У меня есть веб-приложение, которое использует Spring MVC и Hibernate. Я следую этому документу https://getbootstrap.com/docs/4.3/components/navs/#tabs для создания вкладок.
В JSP код для вкладки
<div id="memberDiv" class="container">
<div id="memberAccountManagement" class="jumbotron">
<h3>Member List</h3>
<hr class="mb-4">
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item"><a class="nav-link active" id="other-tab"
data-toggle="tab" href="#other" role="tab" aria-controls="other"
aria-selected="true">Other</a></li>
<li class="nav-item"><a class="nav-link" id="regular-tab"
data-toggle="tab" href="#regular" role="tab"
aria-controls="regular" aria-selected="false">Regular</a></li>
</ul>
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade show active" id="other" role="tabpanel"
aria-labelledby="other-tab">Other member content here
<br />
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>ID</th>
<th>NAME</th>
<th>ROLE</th>
</tr>
</thead>
<tbody>
<c:forEach var="member" items="${members}">
<tr>
<td>${member.id}</td>
<td>${member.username}</td>
<td>${member.memberRole.role}</td>
<td>${member.enabled}</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
<div class="tab-pane fade" id="regular" role="tabpanel"
aria-labelledby="regular-tab">Regular member content here
<br />
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>ID</th>
<th>NAME</th>
<th>ROLE</th>
<th>ENABLED</th>
<th> </th>
</tr>
</thead>
<tbody>
<c:forEach var="member" items="${members}">
<tr>
<td>${member.id}</td>
<td>${member.username}</td>
<td>${member.memberRole.role}</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</div>
</div>
</div>
Вот часть кода в MemberService.java
//for other member
@Override
public List<LoginMember> getOtherAllMember() {
List<LoginMember> memberAccountManagementList = new ArrayList<LoginMember>();
memberAccountManagementList = memberDao.list("from LoginMember u where u.memberRole.role='ROLE_Other' order by u.username");
return memberAccountManagementList;
}
//for regular member
@Override
public List<LoginMember> getRegularAllMember() {
List<LoginMember> memberAccountManagementList = new ArrayList<LoginMember>();
memberAccountManagementList = memberDao.list("from LoginMember u where u.memberRole.role='ROLE_Regular' order by u.username");
return memberAccountManagementList;
}
Вот часть кода в MemberServiceImpl.java
public List<LoginMember> getOtherAllMember();
public List<LoginMember> getRegularAllMember();
У меня есть контроллер (MemberController.java) для вызова функции для отображения.
@RequestMapping(value = {"/memberAccountManagementList"}, method = RequestMethod.GET)
public String memberaccountmanagementlist(ModelMap model) {
model.addAttribute("members", memberService.getRegularAllMember());
return "memberAccountManagementList";
}
Я запускаю приложение. Когда я щелкаю по вкладке Regular, оно может получить элементы, принадлежащие Regular. Однако при переходе на вкладку «Другое» также отображается список членов Regular.
Я думаю, может быть, контроллер должен что-то сделать. Поэтому я продублирую код в контроллере и переименую его
@RequestMapping(value = {"/memberAccountManagementList"}, method = RequestMethod.GET)
public String memberaccountmanagementlist(@RequestParam("myTab") String myTab, ModelMap model) {
System.out.println(myTab); //try to show value
//model.addAttribute("members", memberService.getRegularAllUser());
model.addAttribute("members", memberService.getOtherAllMember());
return "memberAccountManagementList";
}
Когда я запускаю приложение, возникает ошибка, он говорит
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'memberController' method
Я прочитал этот пост Spring mvc Найдено неоднозначное отображение. Невозможно отобразить метод bean-компонента контроллера , но я не представляю, как отобразить соответствующий элемент, щелкнув вкладку.
Итак, мой вопрос, как отобразить соответствующие данные, нажав на вкладку? Я думаю, я должен написать код в контроллере, но
Буду благодарен, если кто-то может дать совет по этому вопросу, пожалуйста.
Обновление:
Из этого поста @ RequestParam vs @ PathVariable я пытался использовать @RequestParam
, чтобы получить идентификатор myTab
в файле jsp и передать его контроллеру.
@RequestMapping(value = {"/memberAccountManagementList"}, method = RequestMethod.GET)
public String memberaccountmanagementlist(@RequestParam("myTab") String myTab, ModelMap model) {
System.out.println(myTab); //try to show value
//model.addAttribute("members", memberService.getRegularAllMember());
model.addAttribute("members", memberService.getOtherAllMember());
return "memberAccountManagementList";
}
Однако, когда я запускаю код, у меня появляется это сообщение об ошибке
Message: Required String parameter 'myTab' is not present
Description: The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
В сообщении об ошибке говорится, что myTab
отсутствует, но в файле jsp присутствует идентификатор myTab
.
Таким образом, из описания ошибки, идентификатор myTab
не передается контроллеру, я не знаю, какая часть неверна.
Кто-нибудь даст мне знать мою ошибку. Благодарен за ваш совет, пожалуйста. Спасибо.
Я обновил код в контроллере:
public String memberaccountmanagementlist(@RequestParam(value="#regular", required=false) String regular,ModelMap model) {
System.out.println("requestparam value is " + regular);
if (regular== "#regular")
{
model.addAttribute("members", memberService.getRegularAllUser());
}
else if(regular =="#other")
{
model.addAttribute("members", memberService.getOtherAllMember());
}
else
{
System.out.println("need to further investigate");
}
Когда я запускаю приложение, оно все еще показывает подобное сообщение об ошибке и описание.
Message: Required String parameter '#regular' is not present
Description: The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
В @RequestParam
, я думаю, что, возможно, #
повлияет на код, но независимо от того, что я добавлю #regular
или regular
, или #other
, или other
, сообщение об ошибке показывает аналогичную вещь. Я не понимаю, почему это не работает.