【问题标题】:Spring MVC: how can I give the <form:textarea /> tag a default value?Spring MVC:我怎样才能给 <form:textarea /> 标签一个默认值?
【发布时间】:2021-02-25 23:22:32
【问题描述】:

我在为 &lt;form:textarea /&gt; 标签指定默认值时遇到问题。
当我创建一个JSP文件如下:

<form:textarea path="Content" id="my-text-box" />${content}

JSP 解析器将上面的行翻译成:

<textarea id="my-text-box" name="Content"></textarea>third hello world!

另外,提供value 属性也不起作用。

<form:textarea value="${content}" path="Content" id="my-text-box" />

JSP 给我作为 HTML 输出:

<textarea id="my-text-box" name="Content" value="third hello world!"></textarea>

可以看到&lt;textarea&gt;标签没有value属性。

如何将默认值传递给&lt;form:textarea&gt; 标签?
提前谢谢你。

【问题讨论】:

    标签: jsp spring-mvc


    【解决方案1】:

    Spring 表单标签用于数据绑定(例如,您的模型属性通过表单的path 属性绑定到表单)。如果您需要指定默认值,则在控制器到达视图之前将ModelYouArePassingToViewContent 属性设置为所需的默认值。

    如果您使用 Spring MVC 和 @RequestMapping,那么您的控制器中一个非常好的地方就是您的 @ModelAttribute 方法。例如:

    @ModelAttribute("modelYouArePassingToView")
    public ModelYouArePassingToView createDefault() {
       //construct it with default values for "Content" 
       //attribute, and it will show up in textarea after the bindind
       ModelYouArePassingToView myapv = new ModelYouArePassingToView(); 
       myapv.setContent(..); //default value
       return myapv;
    }
    

    在您的表单中,确保包含modelAttribute 标签属性:

    <form:form modelAttribute="modelYouArePassingToView" ...>
      <form:textarea path="content" ..> 
    

    【讨论】:

      【解决方案2】:

      我也遇到过类似的情况。以下代码:

      <form:textarea path="Content" id="my-text-box">${content}</form:textarea>
      

      为我解决了。

      【讨论】:

      • 在 Spring 4 中,form:textarea 标签必须为空。
      • 对于最新的稳定版本 Spring 5,这是正确的解决方案。在相关说明中,当不使用显式结束标记(...
      【解决方案3】:

      这适用于 Spring 4,其中 form:textarea 标记必须为空:

      &lt;form:textarea path="content" value="${Object.content}"/&gt;

      【讨论】:

        【解决方案4】:

        您必须使用 JS 和 Spring MVC 来完成这项工作。这就是我所做的:

        1. 将您的文本区域更改为基本 html,如下所示:

           <textarea id="myTextArea" onchange="here();">${content}</textarea>
            OR
           <textarea id="myTextArea" onchange="here();">third hello world!</textarea>
          
        2. 添加一个隐藏的输入字段,使用spring mvc:

          <form:input type="hidden" id="content" path="Content" value="third hello world!"/>
          
        3. 添加以下 JavaScript:

          <script>
            var text1 = document.getElementById('myTextArea').value;
            function here() {
               text1 = document.getElementById('myTextArea').value;
               document.getElementById("content").value = text1;
            }
          </script>
          

        【讨论】:

          【解决方案5】:

          也许你可以使用占位符。

                      <form:textarea
                                      id="id"
                                      class="class"
                                      path="path"
                                      placeholder="test"/>
          

          【讨论】:

          • 属性placeholder的值只会在文本区域内作为提示显示,不构成真实内容。
          【解决方案6】:

          您也可以在模型中设置默认文本。你的jsp会有:

          <form:textarea path="my-text-box" rows="20" cols="100" cssClass="rounded"/>
          

          然后在模型中,您将拥有:

          private static final String DEFAULT_textareacontent = "Hello World";
          private String my-text-box = DEFAULT_textareacontent;
          

          不确定这是否是最佳做法,但它似乎对我有用。

          【讨论】:

            【解决方案7】:

            可以使用jquery获取模型属性值并设置在textarea中

             $( function() {
                     var example = parseInt('${example}');       
                     $("#bot").val(example); 
                } );
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-07-01
              • 2021-08-21
              • 2011-12-18
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多