如何修复Struts 2 <s:checkbox>标记中的Angular语法分析器错误?

时间:2015-08-05 14:21:56

标签: html jsp struts2 struts-tags

我使用AngularJS + Struts 2遇到了一个奇怪的错误。

我有一个Java对象form,其boolean属性名为paid

当我写:

<div class="col-sm-10 form-checkbox">
    <s:checkbox name="xxxxx" ng-model="model" 
        ng-init="model = <s:property value = '%{form.paid}' />" 
        theme="simple" />
</div>

我得到FireBug抱怨AngularJS语法解析器错误,它引导我到这个页面:

syntax error page

建议表达错误。

如果我写:

<div class="col-sm-10 form-checkbox">
    <s:checkbox name="xxxxx" ng-model="model" 
        ng-init="%{form.paid}" 
        theme="simple" />
</div>

未报告错误。我想这是因为Struts标签以<开头,在Angular中不受欢迎。

但是,使用此行没有报告错误:

<select ng-model="estadoId" 
        ng-init="estadoId=<s:property value='%{form.estadoId}'/>"
        name="form.estadoId" id="form.estadoId" 
        value="<s:property value='%{form.estadoId}' />"    >

那么,AngularJS在Struts 2中抱怨<>?或者,我也被允许在另一个<s:...>内使用<s:...>?如果是后者,为什么抱怨Angular而不是Struts 2 ??

1 个答案:

答案 0 :(得分:3)

在第一个代码段中,您正在嵌套Struts标记,即语法错误

<s:checkbox name="xxxxx" 
        ng-model="model" 
         ng-init="model = <s:property value = '%{form.paid}' />" 
           theme="simple" />

在第二个问题中,您使用OGNL正确行事,但省略了model =部分

<s:checkbox name="xxxxx" 
        ng-model="model" 
         ng-init="%{form.paid}" 
           theme="simple" />

正确的版本是两者的混合:

<s:checkbox name="xxxxx" 
        ng-model="model" 
         ng-init="model = %{form.paid}" 
           theme="simple" />

否则您可以使用原始HTML代码(如<select>示例中那样,即标准HTML代码而不是<s:select>,因此不会发生代码嵌套):

<input type="check" name="xxxxx" 
        ng-model="model" 
         ng-init="model = %{form.paid}" />

注意:在这种情况下,您应该在每个复选框下创建一个隐藏参数,以模拟<s:checkbox>代码行为并使Checkbox Interceptor满意。