복붙노트

[SPRING] jsp에서 Spring Controller 메소드로 매개 변수 전달하기

SPRING

jsp에서 Spring Controller 메소드로 매개 변수 전달하기

나는 Hibernate를 사용하는 Spring MVC 애플리케이션에서 일하고있다.

JSP 페이지에는 데이터베이스에 저장된 값 (현재 모든 값)을 나열하는 함수가 있습니다.

목록을 JSP 파일에서 전달 된 ID로만 제한하는 메소드를 작성했습니다. HQL 쿼리가 제대로 작동하므로 ID를 매개 변수로 사용하여 데이터를 검색한다는 것을 알고 있습니다.

이제 컨트롤러에서이 방법을 사용하고 싶습니다. 이를 위해 목록의 ID 매개 변수를 전달해야하므로 컨트롤러 쪽에서 해당 ID를 기반으로 목록을 검색하는 함수가 호출됩니다.

불행히도 JSP 파일에서 매개 변수를 전달하는 방법을 모르겠습니다.

JSP 파일 :

  <c:url var="addAction" value="/note/add" ></c:url>
<form:form action="${addAction}" commandName="notices">
    <table>
        <c:if test="${!empty notices.notetext}">
            <tr>
                <td>
                    <form:label path="noticesid">
                        <spring:message text="noticesid"/>
                    </form:label>
                </td>
                <td>
                    <form:input path="noticesid" readonly="true" size="8"  disabled="true" />
                    <form:hidden path="noticesid" />
                </td>
            </tr>
        </c:if>
        <tr>
            <td>
                <form:label path="notetext">
                    <spring:message text="notetext"/>
                </form:label>
            </td>
            <td>
                <form:input path="notetext"  />
            </td>
        </tr>
        <tr>
            <td>
                <form:label path="notetag" >
                    <spring:message text="notetag"/>
                </form:label>
            </td>
            <td>
                <form:input path="notetag"/>
            </td>
        </tr>
        <tr>
            <td>
                <form:label path="notecolor">
                    <spring:message text="notecolor"/>
                </form:label>
            </td>
            <td>
                <form:input path="notecolor" />
            </td>
        </tr>

        <tr>
            <td>
                <form:label path="canvasid">
                    <spring:message text="canvasid"/>
                </form:label>
            </td>
            <td>
                <form:input path="canvasid" />
            </td>
        </tr>

        <tr>
            <td>
                <form:label path="sectionid">
                    <spring:message text="sectionid"/>
                </form:label>
            </td>
            <td>
                <form:input path="sectionid"  />
            </td>
        </tr>

        <tr>
            <td>
                <form:label path="canvasnName">
                    <spring:message text="canvasnName"/>
                </form:label>
            </td>
            <td>
                <form:input path="canvasnName"  />
            </td>
        </tr>


        <tr>
            <td colspan="2">
                <c:if test="${!empty notices.noticesid}">
                    <input type="submit"
                           value="<spring:message text="Edit note"/>" />
                </c:if>
                <c:if test="${empty notices.notetext}">
                    <input type="submit"
                           value="<spring:message text="Add note"/>" />
                </c:if>
            </td>
        </tr>
    </table>
</form:form>
<br>
<h3>Notes List</h3>

<c:url var="listAction" value="/note/list/2323" ></c:url>
<c:if test="${!empty notices.noticesid}">
    <table class="tg">
        <tr>
            <th width="80">Notes ID</th>
            <th width="120">Notes text</th>
            <th width="120">Note Tag</th>
            <th width="120">Note color</th>
            <th width="120">Note section</th>
            <th width="120">Canvas id</th>
            <th width="120">Canvas name</th>
            <th width="120">Other id</th>
            <th width="60">Edit</th>
            <th width="60">Delete</th>
        </tr>
        <c:forEach items="${listNotes}" var="notices">
            <tr>
                <td>${notices.noticesid}</td>
                <td>${notices.notetext}</td>
                <td>${notices.notetag}</td>
                <td>${notices.notecolor}</td>
                <td>${notices.sectionid}</td>
                <td>${notices.canvasid}</td>
                <td>${notices.canvasnName}</td>
                <td>${notices.personid}</td>
                <td><a href="<c:url value='/editnote/${notices.noticesid}' />" >Edit</a></td>
                <td><a href="<c:url value='/removenote/${notices.noticesid}' />" >Delete</a></td>
            </tr>
        </c:forEach>
    </table>
</c:if>

목록 기능이있는 컨트롤러 파일 :

@RequestMapping(value = "/note/list/{id}", method=RequestMethod.GET)
    public String listNotes(@PathVariable int id,Model model) {
        Person person = personService.getCurrentlyAuthenticatedUser();
        this.setSectionid(id);
        model.addAttribute("person", new Person());
        model.addAttribute("listPersons", this.personService.listPersons());
       model.addAttribute("listNotes",this.notesService.listNotesBySectionId(id,person));
        return "note";
    }

@RequestMapping(value= "/note/add")
    public String addNote(@ModelAttribute("notices") Notes p,Model model) {
        Person person = personService.getCurrentlyAuthenticatedUser();
        model.addAttribute("listNotes",this.notesService.listNotes());

        int id = getSectionid();
        System.out.println("Section id is"+id);
         model.addAttribute("listNotes",this.notesService.listNotesBySectionId(id,person));
        this.notesService.addNote(p, person);
        return "note";
    }

나는 그물을 보려고 노력했지만, 내가 바라는 것이 무엇인지 모르므로 힘든 시간을 보냈다. 도움이된다면 도움이 될 것입니다. 고맙습니다.

해결법

  1. ==============================

    1.컨트롤러 메소드는 다음과 같아야합니다.

    컨트롤러 메소드는 다음과 같아야합니다.

    @RequestMapping(value = " /<your mapping>/{id}", method=RequestMethod.GET)
    public String listNotes(@PathVariable("id")int id,Model model) {
        Person person = personService.getCurrentlyAuthenticatedUser();
        int id = 2323;  // Currently passing static values for testing
        model.addAttribute("person", new Person());
        model.addAttribute("listPersons", this.personService.listPersons());
        model.addAttribute("listNotes",this.notesService.listNotesBySectionId(id,person));
        return "note";
    }
    

    코드에서 id를 사용하고 JSP에서 controller 메소드를 호출하십시오.

    /{your mapping}/{your id}
    

    최신 정보:

    귀하의 JSP 코드를 변경하십시오 :

    <c:forEach items="${listNotes}" var="notices" varStatus="status">
        <tr>
            <td>${notices.noticesid}</td>
            <td>${notices.notetext}</td>
            <td>${notices.notetag}</td>
            <td>${notices.notecolor}</td>
            <td>${notices.sectionid}</td>
            <td>${notices.canvasid}</td>
            <td>${notices.canvasnName}</td>
            <td>${notices.personid}</td>
            <td><a href="<c:url value='/editnote/${listNotes[status.index].noticesid}' />" >Edit</a></td>
            <td><a href="<c:url value='/removenote/${listNotes[status.index].noticesid}' />" >Delete</a></td>
        </tr>
    </c:forEach>
    
  2. ==============================

    2.@RequestParam을 사용하여 매개 변수를 컨트롤러 처리기 메서드에 전달합니다. jsp에서 폼에는 다음과 같이 name = "id"인 입력 필드가 있어야합니다.

    @RequestParam을 사용하여 매개 변수를 컨트롤러 처리기 메서드에 전달합니다. jsp에서 폼에는 다음과 같이 name = "id"인 입력 필드가 있어야합니다.

    <input type="text" name="id" />
    <input type="submit" />
    

    그런 다음 컨트롤러에서 처리기 메서드는 다음과 같아야합니다.

    @RequestMapping("listNotes")
    public String listNotes(@RequestParam("id") int id) {
        Person person = personService.getCurrentlyAuthenticatedUser();
        model.addAttribute("person", new Person());
        model.addAttribute("listPersons", this.personService.listPersons());
        model.addAttribute("listNotes", this.notesService.listNotesBySectionId(id, person));
        return "note";
    }
    

    또한 다음 답변 및 자습서를 참조하십시오.

  3. from https://stackoverflow.com/questions/26652679/passing-parameters-from-jsp-to-spring-controller-method by cc-by-sa and MIT license