9

I am working in a Spring MVC application which uses Hibernate.

In the JSP page I have a function which lists the values stored in the database(currently all the value).

I have written a method, where the list is only limited to an ID passed in the JSP file. I got the HQL query working right, so I know it is retrieving data based upon the ID as a parameter.

Now, I would like to use this method in the controller. For that I have to pass a parameter of ID to the list, so in the controller side, the function is called which will retrieve list based upon that ID.

Unfortunately I don't know how to pass parameters from a JSP file.

JSP File :

  <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>

Controller file with list function :

@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";
    }

I tried looking up the net, but I don't know what it is called that I am looking for, so having a hard time. Any help would be good. Thank you.

We are Borg
  • 5,117
  • 17
  • 102
  • 225

2 Answers2

8

Use the @RequestParam to pass a parameter to the controller handler method. In the jsp your form should have an input field with name = "id" like the following:

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

Then in your controller, your handler method should be like the following:

@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";
}

Please also refer to these answers and tutorial:

dzikoysk
  • 1,560
  • 1
  • 15
  • 27
  • Can you have a look at the modified JSP and controller, somehow the id in controller always stays at zero. – We are Borg Oct 30 '14 at 13:12
  • you mean after using @requestParam ? –  Oct 30 '14 at 13:14
  • Yes. And in JSP I tried to use static value right now, like /note/list/2323. Still it stays at zero. – We are Borg Oct 30 '14 at 13:15
  • I think you got me wrong. The id remains static, hardcoded by developer. I don't want the user to click on the submit button. Can you check the updated JSP page. – We are Borg Oct 30 '14 at 13:23
  • what do you want exactly ? –  Oct 30 '14 at 13:25
  • The developer uses in JSP page something like this /note/list/2323, this '2323' is passed in list function and values with id 2323 are displayed. But the user has no control over it. That's more important. – We are Borg Oct 30 '14 at 13:27
7

Your controller method should be like this:

@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";
}

Use the id in your code, call the controller method from your JSP as:

/{your mapping}/{your id}

UPDATE:

Change your jsp code to:

<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>
David Walschots
  • 12,279
  • 5
  • 36
  • 59
rahul
  • 393
  • 1
  • 4
  • 20