2016-06-25 17 views
0

JSPページで選択オプションを表示しようとしています。オプションはモデルオブジェクトに追加されますが、表示されません。その理由を特定できません。私のコントローラのコードは、私のモデルBeanが以下の通りですSpring MVCフォームが定義済みのモデル属性をバインドしない

List<String> buildServerEnvironments() { 
    List<String> environments = new ArrayList<>(); 
    environments.add("cert"); 
    environments.add("qa5"); 
    return environments; 
    } 

    @RequestMapping(value = "/downloaddcrcontent", method = RequestMethod.GET) 
    String showEnvironmentForm(Model model) { 

    model.addAttribute("envObj", new Environment()); 
    model.addAttribute("serverEnvironments", this.buildServerEnvironments()); 
    return "environments"; 
    } 

以下の通りである:

public class Environment { 

    private String environment; 

    public String getEnvironment() { 
     return environment; 
    } 

    public void setEnvironment(String environment) { 
     this.environment = environment; 
    } 


    @Override 
    public String toString() { 
     // TODO Auto-generated method stub 
     return new StringBuilder(this.getClass().getSimpleName()). 
      append("(environment = ").append(this.environment).append(")"). 
      toString(); 
    } 
    } 

私のJSPページ。

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<%-- Used to import resources. --%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> 
<!DOCTYPE html> 
<html> 
    <head> 
     <title>Select Environment</title> 
     <%@ include file="meta_head.jspf" %> 
     <%@ include file="bootstrap_import.jspf" %> 
     <!-- Custom style sheet. --> 
     <style> 
     body { 
     padding-top: 50px; 
     padding-bottom: 50px; 
     background-color: #EEE; 
     } 

     .form-signin { 
     max-width: 330px; 
     padding: 15px; 
     margin: 0 auto; 
     } 
     </style> 

    </head> 
    <body> 
     <div class="container"> 
     <div class="row"> 
     <div class="form-signin"> 
     <p class="lead">Environment Selection.</p> 
     <form:form class="form-signin form-horizontal" method="POST" action="generatedcrreport" modelAttribute="envObj" > 

      <spring:bind path="environment"> 
      <div class="form-group ${status.error ? 'has-error' : ''}"> 
       <form:label path="environment">Environment</form:label> 
       <c:out value="${serverEnvironments}" /> 
       <form:select path="environment" class="form-control" tabindex="0"> 
        <form:option value="">Select an environment</form:option> 
        <c:forEach var="env" items="${serverEnvironments}" varStatus="index"> 
         <form:option value="${env}"><c:out value="${env}" /></form:option> 
        </c:forEach> 
       </form:select> 
      </spring:bind> 


      </div> 

    <form:button type="submit" class="btn btn-lg btn-primary btn-block">Select Environment</form:button> 
    </form:form> 
    </div> 

     </div> 

    </div> 
    </body> 
</html> 

私は、レンダリングされたJSPが、私はSpringのモデルオブジェクトに追加さserverEnvironments属性を認識していないことが判明します。私は、私ものModelAndViewにオブジェクトを渡しますが、無駄にしようとした以下の記事

  • how to bind select option value in spring mvc
  • Spring MVC model attribute value not displaying

  • How to bind multiple dropdown to model - spring mvc
    1. 通過しました。 ModelAndViewを処理するための私のコードは以下のとおりであると

      https://www.javacodegeeks.com/2013/07/spring-mvc-form-handling-vol-5-select-option-options-tags.html

      @RequestMapping(value = "/showEnvironments", method = RequestMethod.GET) 
           ModelAndView showEnvironmentForm() { 
           ModelAndView view = new ModelAndView("environments"); 
           view.addObject("envObj", new Environment()); 
           view.addObject("serverEnvironments", this.buildServerEnvironments()); 
           return view; 
           } 
      

      この記事に基づいており、私は<c:out value="${serverAttributes}" />ステートメントを使用してserverAttributesを表示しようとしたが、そのまま出力が表示されます。

      生成されたJSPファイルは次のとおりです。

      enter image description here

    +0

    おそらく2つのメソッドが同じビューを返すと思われますが、唯一の違いはリストが初期化されないということです。あなたの写真では、フォームは 'http:// localhost:8080/cmsbackend/downloaddcrcontent'でリクエストされますが、' http:// localhost:8080/showEnvironments'でリクエストされるべきです –

    +0

    私はあなたの提案を試みました。変数はレンダリングされません。 – Kartik

    答えて

    0

    にコード

    <form:select path="environment" class="form-control" tabindex="0"> 
    

    を変更するので、問題は私のweb.xmlにしました。私の設定は、私が2.3 XSDに取り組んでいることを示しています。その結果、ELタグは無視された。

    web.xmlをバージョン2.4に変更すると、変更が反映されました。

    <web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
    version="2.4"> 
        . . . . . 
    </web-app> 
    
    1

    あなたのJSPで

    <form:select path="serverEnvironments" class="form-control" tabindex="0"> 
    
    +0

    環境オブジェクトの「環境」属性に選択した値をバインドします。私のモデル属性が "環境"型のオブジェクトであるため、変数を "環境変数"にバインドする必要があるわけではありません。私のJSPを見れば、私のJSPにがありますが、値は表示されません。 – Kartik

    関連する問題