簡體   English   中英

在URL問題中將參數從JSP傳遞到Controller

[英]Passing parameters from JSP to Controller in URL issue

我想更新一些用戶的數據,並且從JSP下拉菜單接收參數時遇到問題。 我想從“ Enter PC”塊接收輸入的compId並將其作為PathVariable傳遞。 但是沒有看到。 如果我對action =“ $ {app} /adminEdit.do / $ {user.userId} / $ {any number} ”進行硬編碼,則它可以正常工作。 因此,問題是–現在要從下拉列表中獲取此參數並將其設置為path? 提前致謝。

Update.jsp片段

<c:set var="app" value="${pageContext.request.contextPath}"/>
............
<DIV class="admin_redaction_block">
<sf:form name="adminUserUpdate"
         method="POST"
         modelAttribute="userForm"
         action="${app}/adminEdit.do/${user.userId}/${comp.compId}"
         enctype="application/x-www-form-urlencoded">

    <c:if test="${not empty errorMsg}">
        <div class="error">
            <c:out value="${errorMsg}"/>
        </div>
    </c:if>

    <sf:label path="password"><strong>Enter new password:</strong></sf:label> <br>
    <sf:input path="password" type="text" size="20"/><br>
    <sf:errors path="password" cssClass="error"/>
    <br>
    <sf:label path="email"><strong>Enter new Email:</strong></sf:label> <br>
    <sf:input path="email" type="text" size="20"/><br>
    <sf:errors path="email" cssClass="error"/>

    <strong>PC Assigned:</strong>
    <h3 class="h3">
        <td>
            <c:choose>
                <c:when test="${user.computers!= null && !user.computers['empty']}">
                    <c:forEach items="${user.computers}" var="comp">
                        <c:out value="${comp.pcName}"/>
                    </c:forEach>
                </c:when>
                <c:otherwise>
                    <p class="h3_error">No PC Assigned</p>
                </c:otherwise>
            </c:choose>
        </td>
    </h3>

    <sf:label path="computers">Enter PC:</sf:label> <br>
    <sf:select path="computers" size="3">
        <c:forEach items="${computers}" var="comp">
            <sf:option value="${comp.compId}">
                <c:out value="${comp.compId}"/>
            </sf:option>
        </c:forEach>
    </sf:select>
    <br> <br>

    <input type="SUBMIT" name="SUBMIT" value="Update User"/>
</sf:form>

控制者

 @RequestMapping(value = "/adminEdit.do/{userId}/{compId}", method = RequestMethod.POST)
 public ModelAndView updateUserProcess(@ModelAttribute(value = "userForm")
 UserForm userForm,
 @PathVariable("userId") Integer userId,
 @PathVariable("compId") Integer compId,
         BindingResult result, Model model,
         HttpSession session,
         HttpServletRequest request) {
 User user = userService.getUserById(userId);
 model.addAttribute("computers", computerService.getAllComputers());
 ............
 model.addAttribute("userForm", userForm);
 return updatingUser(user, model, userForm);
 }  

你不能。

您只是忘記了事情是在不同的時間寫的。

<sf:form name="adminUserUpdate" ...
     action="${app}/adminEdit.do/${user.userId}/${comp.compId}" ...>

是在回答生成表單的請求時寫 那時,您的應用程序(服務器端)僅在生成HTML頁面,而$comp.compid}不存在。 您可以通過在瀏覽器中查看頁面的HTML源代碼來進行驗證。

稍后,當您單擊submit按鈕時,瀏覽器將從輸入字段中收集數據編碼為全部,並通過POST請求將其發送到操作URL 而不進行更改 瀏覽器甚至都不知道您在jsp中寫了${app}/adminEdit.do/${user.userId}/${comp.compId} :瀏覽器僅接收純文本字符串localhost:8080/adminEdit.do/2/

因此...嘗試使用<sf:select><sf:checkboxes>標記從表單的輸入字段獲取comp.compid

好了,經過長時間的搜索,我發現現在可以將參數從JSP傳遞到Controller。 有特殊的類CustomCollectionEditor ,它可以幫助傳遞甚至多個選擇值。 這是一個很好的例子https://blog.codecentric.de/en/2009/07/multiple-selects-mit-spring-mvc-2/

和我的代碼段:

 @InitBinder("userForm")
    private void initBinder(WebDataBinder binder) {
        binder.registerCustomEditor(Set.class, "computers", new CustomCollectionEditor(Set.class) {

            @Override
            protected Object convertElement(Object element) {
                String pcName = null;
                Set<Computer> computerSet = new LinkedHashSet<>();    
                if (element instanceof String && !((String) element).equals("")) {
                    pcName = (String) element;                       
                }                   
                return pcName != null ? computerService.getComputerByName(pcName) : null;
            }
        });
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM