1

我正在根据选择标签的变化动态加载弹簧复选框标签。但它会产生如下错误:

2012-08-31 09:27:14.829 org.springframework.web.servlet.tags.RequestContextAwareTag doStartTag: Neither BindingResult nor plain target object for bean name 'stockList' available as request attribute
W 2012-08-31 09:27:14.831 /stocks
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'stockList' available as request attribute
C 2012-08-31 09:27:14.832 Uncaught exception from servlet
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'stockList' available as request attribute

在我的应用引擎服务器日志中。

我的代码如下

<link rel="stylesheet"
    href="http://code.jquery.com/mobile/1.1.1/jquery.mobile-1.1.1.min.css" />
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script
    src="http://code.jquery.com/mobile/1.1.1/jquery.mobile-1.1.1.min.js"></script>
<script type="text/javascript">
    function loadStocks() {
        var exchange = $("#stockExchange").val();
        var a;
        if (exchange = "BO") {
            a = "<form:checkbox path='stockList' value='INFY' label='Infosys' />"
                    + "<form:checkbox path='stockList' value='HINDALCO' label='HINDALCO' />"
                    + "<form:checkbox path='stockList' value='TTM' label='Tata Motors' />";
        } else if (exchange == "NS") {
            a = "<form:checkbox path='stockList' value='INFY' label='Infosys' />";
        }
        $("#kit").html(a);
    }
</script>
</head>
<body>
    <div data-role="page">
        <div data-role="content">
            <form:form method="POST" commandName="search">
                <ul data-role="listview">
                    <li data-role="fieldcontain">
                        <div id="kit">
                            <form:select path="stockExchange" onchange="loadStocks()"
                                id="stockExchange">
                                <form:option value="">Select Stock Exchange</form:option>
                                <form:option value="BO">BSE</form:option>
                                <form:option value="NS">NSE</form:option>
                            </form:select>
                        </div>
                    </li>

                    <li data-role="fieldcontain"><label>Select Stocks</label>
                        <div id="kit">
                            <form:checkbox path="stockList" value="INFY" label="Infosys" />
                            <form:checkbox path="stockList" value="HINDALCO" label="HINDALCO" />
                            <form:checkbox path="stockList" value="TTM" label="Tata Motors" />
                            <form:checkbox path="stockList" label="RELIANCE IND."
                                value="RELIANCE" />
                        </div></li>

                    <li data-role="fieldcontain"><input type="submit"
                        value="Submit" /></li>
                </ul>
            </form:form>
        </div>
        <!-- /content -->

    </div>
    <!-- /page -->

</body>
4

1 回答 1

1

这个javascript函数不能这样工作。在您的浏览器中查看 HTML 源代码,您会发现它与 JSP 的不同。标签是弹簧标签,<form:xxxx/>用于快速生成 HTML 并使属性绑定更容易。因此,例如:

<form:checkbox path="stockList" value="INFY" label="Infosys" />

将被转换为这个纯 HTML:

<input type="checkbox" id="stockList" name="stockList" value="INFY" label="Infosys" />

由于您的 javascript 函数位于客户端,因此 spring 标记不会被转换,因此您必须在 Javascript 函数中使用纯 html。像这样的东西:

function loadStocks() {
    var exchange = $("#stockExchange").val();
    var a;
    if (exchange = "BO") {
        a = "<input type='checkbox' id='stockList1' name='stockList' value='INFY' label='Infosys' />"
                + "<input type='checkbox' id='stockList2' name='stockList' value='HINDALCO' label='HINDALCO' />"
                + "<input type='checkbox' id='stockList3' name='stockList' value='TTM' label='Tata Motors' />";
    } else if (exchange == "NS") {
        a = "<input type='checkbox' id='stockList' name='stockList' value='INFY' label='Infosys' />";
    }
    $("#kit").html(a);
}

希望我已经很好地解释了自己。

PS:为什么id输入是stockList1stockList2stockList3?答案和相关信息在这里,检查一下,将对您有所帮助。

编辑:

另一种可能更简单的解决方案是在您的 JSP 中创建一个隐藏的 div,其中包含 JS 函数所需的输入,并让 spring 对其进行转换。稍后,在您的 JS 函数中,您可以使用 JQuery 克隆 Spring 生成的这些输入。这种方式可以避免创建 Spring 可以理解的纯 HTML。

于 2012-08-31T10:14:24.870 回答