如何修复 Struts 2 <s:checkbox> 标记中的 Angular 语法分析器错误?
How to fix the Angular syntax parser error within a Struts 2 <s:checkbox> tag?
我在使用 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??
在第一个片段中,您嵌套了 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 满意。
我在使用 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??
在第一个片段中,您嵌套了 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 满意。