2015-08-05 3 views
2

я обнаружил странную ошибку, используя AngularJS + Struts 2.Как исправить ошибку синтаксического анализа синтаксиса в теге Struts 2 <s:checkbox>?

У меня есть объект 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:...>? Если последнее так, то почему неудобно Угловое не Struts 2 ??

+1

Если сообщение * содержит * синтаксическую ошибку, это не значит, что все связано с синтаксической ошибкой. В этом Q & A участвуют больше вещей, таких как OGNL в динамических атрибутах, s: поведение флажка и т. Д. –

+2

Вы не можете вложить такие тэги. –

+0

Незаконные конструкции JSP не связаны с угловыми. –

ответ

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 счастливым.

+0

Спасибо! Я пробовал свой правильный путь, и он работает. – FaithReaper

+0

@FaithReaper есть ли какие-либо проблемы с принятием ответа?Я видел, что вы никогда не принимали ответа, даже тот, который вы отправили сами: | Чтобы принять ответ, просто нажмите белый V в верхнем левом углу ответа, превратив его в зеленый ... вы также должны подумать о том, чтобы вернуться к другим вопросам и принять каждый ответ, который решил вашу проблему. –

+1

Да, спасибо, что рассказали мне это. Я принял ваш ответ. – FaithReaper