【问题标题】:How to to use Struts 2 tags in jQuery as String如何在 jQuery 中使用 Struts 2 标签作为字符串
【发布时间】:2014-06-14 07:51:31
【问题描述】:

无法在 jQuery 中使用 Struts2 标记作为 String

这是我的div

<div class="row">
        <div class="form-group col-xs-12 col-sm-6 col-lg-3">
            <label>Expensed Type</label>
            <s:select name="expenseList[0].param" 
                      list="'advertisement','food'"/>
        </div>
        <div class="form-group col-xs-12 col-sm-6 col-lg-3">
            <label>Amount</label>
            <s:textfield name="expenseList[0].value" value="%{expenseList[0].value}"/>
        </div>
        <div class="form-group col-xs-12 col-sm-6 col-lg-3">
            <label>Date</label>
            <s:textfield name="expenseList[0].dt" value="%{expenseList[0].dt}"/>
        </div>
    </div>
<div class="col-xs-4 right">
    <span class="glyphicon-plus"></span>
 <button type="submit" class="btn btn-default">Save</button>
    </div>

我想在 JavaScript 中使用上面的 String,这样每当用户点击 add 按钮时,它必须生成一个新行。我在上面添加到一个 jQuery 点击事件

如下:

<script type="text/javascript">
        $(document).ready(function() {
            $(document).on('click', '#add', function(event) {
                event.preventDefault();
                $(".row").append("< /div  <div class=\"row\">"
                    + "<div class = \"form - group col - xs - 12 col - sm - 6 col - lg - 3\">"
                    + "<label> Expensed Type </label>"
                    + "<s:select name=\"expenseList[1].param\" list=\"'advertisement','food'\"/>"
                    + "</div>"
                    + "<div class = \"form - group col - xs - 12 col - sm - 6 col - lg - 3\">"
                    + "<label> Amount </label>"
                    + "<s:textfield name=\"expenseList[1].value\" value=\"%{expenseList[1].value}\"/>"
                    + "</div>"
                    + "  <div class = \"form - group col - xs - 12 col - sm - 6 col - lg - 3\">"
                    + "<label> Date </label>"
                    + "<s:textfield name=\"expenseList[1].dt\" value=\"%{expenseList[1].dt}\"/>\"/> "
                    + "</div>"
                    + "</div>"
                    );
        });
    });
    </script>

显示以下异常:

org.apache.jasper.JasperException: /pages/expense/AddExpense.jsp (line: 88, column: 43) quote symbol expected
    org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42)
    org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:443)
    org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:89)
    org.apache.jasper.compiler.Parser.parseAttribute(Parser.java:222)
    org.apache.jasper.compiler.Parser.parseAttributes(Parser.java:162)
    org.apache.jasper.compiler.Parser.parseAttributes(Parser.java:153)
    org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1236)
    org.apache.jasper.compiler.Parser.parseElements(Parser.java:1452)
    org.apache.jasper.compiler.Parser.parse(Parser.java:138)
    org.apache.jasper.compiler.ParserController.doParse(ParserController.java:242)
    org.apache.jasper.compiler.ParserController.parse(ParserController.java:102)
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:198)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:373)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)



Line 88 is `+ "<s:select name=\"expenseList[1].param\" list=\"'advertisement','food'\"/>"`

【问题讨论】:

  • expenseList 包含什么?
  • expenseList 是 arrayList。这将存储许多 Expense 对象的实例

标签: javascript java jquery jsp struts2


【解决方案1】:

由于您仅使用 javascript 来附加 HTML(而不是操纵它或 DOM),因此请考虑返回 JSP sn-p。

你可以找到complete example here

还记得映射keypress,否则使用键盘的用户不会触发事件。

应该是这样的:

<script type="text/javascript">
    $(document).ready(function() {
        $("#add").on('keypress click', function(event) {
            $.ajax({
                url: "<s:url action='loadNewRowTemplateWithAjaxAction'/>",
            }).done(function(result) {
                $(".row").append(result);
            });
        });
    });
</script>

这使您可以保持干净的 JSP 并在服务器端执行操作,例如检查是否可以添加新行,或更新会话中的行计数器等等...

【讨论】:

    【解决方案2】:

    您不能使用 Struts 标记在 javascript 变量中生成 HTML 作为字符串,因为生成的代码应该转义引号。

    javascript 字符串需要 quotes 围绕内容,并且内容中的每个引号都应该被转义,因此它不会以字符串内容结尾。

    您也可以尝试使用单引号或双引号来分隔字符串值,但如果不正确转义它将在呈现之前失败。

    使用 Ajax 加载作为 Ajax 响应返回的 HTML,而不是从 javascript 变量中的 Struts 标记生成 HTML。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多