Как отобразить соответствующие данные, нажав на вкладку - PullRequest
0 голосов
/ 07 марта 2019

У меня есть веб-приложение, которое использует 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>&nbsp;</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, сообщение об ошибке показывает аналогичную вещь. Я не понимаю, почему это не работает.

...