我使用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语法解析器错误,它引导我到这个页面:
建议表达错误。
如果我写:
<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 ??
答案 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满意。