You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by jo...@apache.org on 2015/10/05 20:06:56 UTC

[51/52] [abbrv] [partial] struts-examples git commit: Add new rest plugin and angularjs based example application with support for bean validation and multi language support

Add new rest plugin and angularjs based example application with support for bean validation and multi language support


Project: http://git-wip-us.apache.org/repos/asf/struts-examples/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts-examples/commit/a183bf5c
Tree: http://git-wip-us.apache.org/repos/asf/struts-examples/tree/a183bf5c
Diff: http://git-wip-us.apache.org/repos/asf/struts-examples/diff/a183bf5c

Branch: refs/heads/master
Commit: a183bf5cb414ee19ad5788e09d579f71d4f0ddea
Parents: eb48254
Author: Johannes Geppert <jo...@apache.org>
Authored: Mon Oct 5 19:23:17 2015 +0200
Committer: Johannes Geppert <jo...@apache.org>
Committed: Mon Oct 5 19:23:18 2015 +0200

----------------------------------------------------------------------
 pom.xml                                         |     7 +-
 rest-angular/pom.xml                            |   227 +
 .../struts/actions/IndexController.java         |    56 +
 .../struts/actions/data/LanguageController.java |    41 +
 .../struts/actions/data/OrderController.java    |    80 +
 .../struts/actions/data/package-info.java       |     6 +
 .../ExceptionHandlerInterceptor.java            |    52 +
 .../apache/examples/struts/models/Order.java    |    86 +
 .../examples/struts/services/OrdersService.java |    41 +
 .../src/main/resources/exceptions_de.properties |     1 +
 .../src/main/resources/exceptions_en.properties |     1 +
 .../src/main/resources/frontend_de.properties   |    16 +
 .../src/main/resources/frontend_en.properties   |    16 +
 rest-angular/src/main/resources/jshint.conf.js  |    13 +
 rest-angular/src/main/resources/log4j2.xml      |    16 +
 rest-angular/src/main/resources/struts.xml      |    82 +
 .../src/main/resources/validation_de.properties |     2 +
 .../src/main/resources/validation_en.properties |     2 +
 .../src/main/webapp/WEB-INF/content/index.jsp   |    78 +
 rest-angular/src/main/webapp/WEB-INF/web.xml    |    20 +
 rest-angular/src/main/webapp/css/app.css        |     4 +
 .../src/main/webapp/css/bootstrap-theme.css     |   476 +
 .../src/main/webapp/css/bootstrap-theme.css.map |     1 +
 .../src/main/webapp/css/bootstrap-theme.min.css |     5 +
 rest-angular/src/main/webapp/css/bootstrap.css  |  6584 +++
 .../src/main/webapp/css/bootstrap.css.map       |     1 +
 .../src/main/webapp/css/bootstrap.min.css       |     5 +
 .../fonts/glyphicons-halflings-regular.eot      |   Bin 0 -> 20127 bytes
 .../fonts/glyphicons-halflings-regular.svg      |   288 +
 .../fonts/glyphicons-halflings-regular.ttf      |   Bin 0 -> 45404 bytes
 .../fonts/glyphicons-halflings-regular.woff     |   Bin 0 -> 23424 bytes
 .../fonts/glyphicons-halflings-regular.woff2    |   Bin 0 -> 18028 bytes
 rest-angular/src/main/webapp/index.jsp          |     1 +
 rest-angular/src/main/webapp/js/app.js          |    26 +
 rest-angular/src/main/webapp/js/config.js       |    57 +
 .../main/webapp/js/controllers/AppController.js |    53 +
 .../webapp/js/controllers/OrderAddController.js |    47 +
 .../js/controllers/OrderDetailController.js     |    44 +
 .../js/controllers/OrderEditController.js       |    56 +
 .../webapp/js/controllers/OrdersController.js   |    51 +
 .../js/lib/angular-translate-loader-url.min.js  |     6 +
 .../main/webapp/js/lib/angular-translate.min.js |     6 +
 .../webapp/js/lib/angular/angular-animate.js    |  3862 ++
 .../js/lib/angular/angular-animate.min.js       |    56 +
 .../js/lib/angular/angular-animate.min.js.map   |     8 +
 .../main/webapp/js/lib/angular/angular-aria.js  |   393 +
 .../webapp/js/lib/angular/angular-aria.min.js   |    13 +
 .../js/lib/angular/angular-aria.min.js.map      |     8 +
 .../webapp/js/lib/angular/angular-cookies.js    |   321 +
 .../js/lib/angular/angular-cookies.min.js       |     9 +
 .../js/lib/angular/angular-cookies.min.js.map   |     8 +
 .../main/webapp/js/lib/angular/angular-csp.css  |    21 +
 .../webapp/js/lib/angular/angular-loader.js     |   443 +
 .../webapp/js/lib/angular/angular-loader.min.js |    10 +
 .../js/lib/angular/angular-loader.min.js.map    |     8 +
 .../js/lib/angular/angular-message-format.js    |   980 +
 .../lib/angular/angular-message-format.min.js   |    26 +
 .../angular/angular-message-format.min.js.map   |     8 +
 .../webapp/js/lib/angular/angular-messages.js   |   678 +
 .../js/lib/angular/angular-messages.min.js      |    11 +
 .../js/lib/angular/angular-messages.min.js.map  |     8 +
 .../main/webapp/js/lib/angular/angular-mocks.js |  2458 +
 .../webapp/js/lib/angular/angular-resource.js   |   675 +
 .../js/lib/angular/angular-resource.min.js      |    13 +
 .../js/lib/angular/angular-resource.min.js.map  |     8 +
 .../main/webapp/js/lib/angular/angular-route.js |   991 +
 .../webapp/js/lib/angular/angular-route.min.js  |    15 +
 .../js/lib/angular/angular-route.min.js.map     |     8 +
 .../webapp/js/lib/angular/angular-sanitize.js   |   683 +
 .../js/lib/angular/angular-sanitize.min.js      |    16 +
 .../js/lib/angular/angular-sanitize.min.js.map  |     8 +
 .../webapp/js/lib/angular/angular-scenario.js   | 40108 +++++++++++++++++
 .../main/webapp/js/lib/angular/angular-touch.js |   628 +
 .../webapp/js/lib/angular/angular-touch.min.js  |    13 +
 .../js/lib/angular/angular-touch.min.js.map     |     8 +
 .../src/main/webapp/js/lib/angular/angular.js   | 28688 ++++++++++++
 .../main/webapp/js/lib/angular/angular.min.js   |   293 +
 .../webapp/js/lib/angular/angular.min.js.map    |     8 +
 .../src/main/webapp/js/lib/angular/errors.json  |     1 +
 .../js/lib/angular/i18n/angular-locale_aa-dj.js |   128 +
 .../js/lib/angular/i18n/angular-locale_aa-er.js |   128 +
 .../js/lib/angular/i18n/angular-locale_aa-et.js |   128 +
 .../js/lib/angular/i18n/angular-locale_aa.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_af-na.js |   110 +
 .../js/lib/angular/i18n/angular-locale_af-za.js |   110 +
 .../js/lib/angular/i18n/angular-locale_af.js    |   110 +
 .../lib/angular/i18n/angular-locale_agq-cm.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_agq.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_ak-gh.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ak.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_am-et.js |   110 +
 .../js/lib/angular/i18n/angular-locale_am.js    |   110 +
 .../lib/angular/i18n/angular-locale_ar-001.js   |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-ae.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-bh.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-dj.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-dz.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-eg.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-eh.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-er.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-il.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-iq.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-jo.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-km.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-kw.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-lb.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-ly.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-ma.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-mr.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-om.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-ps.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-qa.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-sa.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-sd.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-so.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-ss.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-sy.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-td.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-tn.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar-ye.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ar.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_as-in.js |   128 +
 .../js/lib/angular/i18n/angular-locale_as.js    |   128 +
 .../lib/angular/i18n/angular-locale_asa-tz.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_asa.js   |   128 +
 .../lib/angular/i18n/angular-locale_ast-es.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_ast.js   |   128 +
 .../angular/i18n/angular-locale_az-cyrl-az.js   |   110 +
 .../lib/angular/i18n/angular-locale_az-cyrl.js  |   110 +
 .../angular/i18n/angular-locale_az-latn-az.js   |   110 +
 .../lib/angular/i18n/angular-locale_az-latn.js  |   110 +
 .../js/lib/angular/i18n/angular-locale_az.js    |   110 +
 .../lib/angular/i18n/angular-locale_bas-cm.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_bas.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_be-by.js |   110 +
 .../js/lib/angular/i18n/angular-locale_be.js    |   110 +
 .../lib/angular/i18n/angular-locale_bem-zm.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_bem.js   |   128 +
 .../lib/angular/i18n/angular-locale_bez-tz.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_bez.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_bg-bg.js |   110 +
 .../js/lib/angular/i18n/angular-locale_bg.js    |   110 +
 .../angular/i18n/angular-locale_bm-latn-ml.js   |   128 +
 .../lib/angular/i18n/angular-locale_bm-latn.js  |   128 +
 .../js/lib/angular/i18n/angular-locale_bm-ml.js |   115 +
 .../js/lib/angular/i18n/angular-locale_bm.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_bn-bd.js |   110 +
 .../js/lib/angular/i18n/angular-locale_bn-in.js |   110 +
 .../js/lib/angular/i18n/angular-locale_bn.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_bo-cn.js |   128 +
 .../js/lib/angular/i18n/angular-locale_bo-in.js |   128 +
 .../js/lib/angular/i18n/angular-locale_bo.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_br-fr.js |   110 +
 .../js/lib/angular/i18n/angular-locale_br.js    |   110 +
 .../lib/angular/i18n/angular-locale_brx-in.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_brx.js   |   128 +
 .../angular/i18n/angular-locale_bs-cyrl-ba.js   |   128 +
 .../lib/angular/i18n/angular-locale_bs-cyrl.js  |   128 +
 .../angular/i18n/angular-locale_bs-latn-ba.js   |   128 +
 .../lib/angular/i18n/angular-locale_bs-latn.js  |   128 +
 .../js/lib/angular/i18n/angular-locale_bs.js    |   128 +
 .../lib/angular/i18n/angular-locale_byn-er.js   |   115 +
 .../js/lib/angular/i18n/angular-locale_byn.js   |   115 +
 .../js/lib/angular/i18n/angular-locale_ca-ad.js |   128 +
 .../i18n/angular-locale_ca-es-valencia.js       |   128 +
 .../js/lib/angular/i18n/angular-locale_ca-es.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ca-fr.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ca-it.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ca.js    |   128 +
 .../lib/angular/i18n/angular-locale_cgg-ug.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_cgg.js   |   128 +
 .../lib/angular/i18n/angular-locale_chr-us.js   |   110 +
 .../js/lib/angular/i18n/angular-locale_chr.js   |   110 +
 .../angular/i18n/angular-locale_ckb-arab-iq.js  |   128 +
 .../angular/i18n/angular-locale_ckb-arab-ir.js  |   128 +
 .../lib/angular/i18n/angular-locale_ckb-arab.js |   128 +
 .../lib/angular/i18n/angular-locale_ckb-iq.js   |   128 +
 .../lib/angular/i18n/angular-locale_ckb-ir.js   |   128 +
 .../angular/i18n/angular-locale_ckb-latn-iq.js  |   128 +
 .../lib/angular/i18n/angular-locale_ckb-latn.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ckb.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_cs-cz.js |   128 +
 .../js/lib/angular/i18n/angular-locale_cs.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_cy-gb.js |   110 +
 .../js/lib/angular/i18n/angular-locale_cy.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_da-dk.js |   141 +
 .../js/lib/angular/i18n/angular-locale_da-gl.js |   141 +
 .../js/lib/angular/i18n/angular-locale_da.js    |   141 +
 .../lib/angular/i18n/angular-locale_dav-ke.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_dav.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_de-at.js |   128 +
 .../js/lib/angular/i18n/angular-locale_de-be.js |   128 +
 .../js/lib/angular/i18n/angular-locale_de-ch.js |   128 +
 .../js/lib/angular/i18n/angular-locale_de-de.js |   128 +
 .../js/lib/angular/i18n/angular-locale_de-li.js |   128 +
 .../js/lib/angular/i18n/angular-locale_de-lu.js |   128 +
 .../js/lib/angular/i18n/angular-locale_de.js    |   128 +
 .../lib/angular/i18n/angular-locale_dje-ne.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_dje.js   |   128 +
 .../lib/angular/i18n/angular-locale_dsb-de.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_dsb.js   |   128 +
 .../lib/angular/i18n/angular-locale_dua-cm.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_dua.js   |   128 +
 .../lib/angular/i18n/angular-locale_dyo-sn.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_dyo.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_dz-bt.js |   128 +
 .../js/lib/angular/i18n/angular-locale_dz.js    |   128 +
 .../lib/angular/i18n/angular-locale_ebu-ke.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_ebu.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_ee-gh.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ee-tg.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ee.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_el-cy.js |   110 +
 .../js/lib/angular/i18n/angular-locale_el-gr.js |   110 +
 .../js/lib/angular/i18n/angular-locale_el.js    |   110 +
 .../lib/angular/i18n/angular-locale_en-001.js   |   128 +
 .../lib/angular/i18n/angular-locale_en-150.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_en-ag.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-ai.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-as.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-au.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-bb.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-be.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-bm.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-bs.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-bw.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-bz.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-ca.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-cc.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-ck.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-cm.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-cx.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-dg.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-dm.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-er.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-fj.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-fk.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-fm.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-gb.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-gd.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-gg.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-gh.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-gi.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-gm.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-gu.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-gy.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-hk.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-ie.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-im.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-in.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-io.js |   128 +
 .../lib/angular/i18n/angular-locale_en-iso.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_en-je.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-jm.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-ke.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-ki.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-kn.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-ky.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-lc.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-lr.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-ls.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-mg.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-mh.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-mo.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-mp.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-ms.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-mt.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-mu.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-mw.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-my.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-na.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-nf.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-ng.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-nr.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-nu.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-nz.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-pg.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-ph.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-pk.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-pn.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-pr.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-pw.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-rw.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-sb.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-sc.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-sd.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-sg.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-sh.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-sl.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-ss.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-sx.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-sz.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-tc.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-tk.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-to.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-tt.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-tv.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-tz.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-ug.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-um.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-us.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-vc.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-vg.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-vi.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-vu.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-ws.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-za.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-zm.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en-zw.js |   128 +
 .../js/lib/angular/i18n/angular-locale_en.js    |   128 +
 .../lib/angular/i18n/angular-locale_eo-001.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_eo.js    |   128 +
 .../lib/angular/i18n/angular-locale_es-419.js   |   110 +
 .../js/lib/angular/i18n/angular-locale_es-ar.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-bo.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-cl.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-co.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-cr.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-cu.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-do.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-ea.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-ec.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-es.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-gq.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-gt.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-hn.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-ic.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-mx.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-ni.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-pa.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-pe.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-ph.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-pr.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-py.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-sv.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-us.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-uy.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es-ve.js |   110 +
 .../js/lib/angular/i18n/angular-locale_es.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_et-ee.js |   128 +
 .../js/lib/angular/i18n/angular-locale_et.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_eu-es.js |   110 +
 .../js/lib/angular/i18n/angular-locale_eu.js    |   110 +
 .../lib/angular/i18n/angular-locale_ewo-cm.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_ewo.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_fa-af.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fa-ir.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fa.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_ff-cm.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ff-gn.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ff-mr.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ff-sn.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ff.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_fi-fi.js |   128 +
 .../js/lib/angular/i18n/angular-locale_fi.js    |   128 +
 .../lib/angular/i18n/angular-locale_fil-ph.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_fil.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_fo-fo.js |   128 +
 .../js/lib/angular/i18n/angular-locale_fo.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_fr-be.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-bf.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-bi.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-bj.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-bl.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-ca.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-cd.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-cf.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-cg.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-ch.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-ci.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-cm.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-dj.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-dz.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-fr.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-ga.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-gf.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-gn.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-gp.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-gq.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-ht.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-km.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-lu.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-ma.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-mc.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-mf.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-mg.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-ml.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-mq.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-mr.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-mu.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-nc.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-ne.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-pf.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-pm.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-re.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-rw.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-sc.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-sn.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-sy.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-td.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-tg.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-tn.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-vu.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-wf.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr-yt.js |   110 +
 .../js/lib/angular/i18n/angular-locale_fr.js    |   110 +
 .../lib/angular/i18n/angular-locale_fur-it.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_fur.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_fy-nl.js |   128 +
 .../js/lib/angular/i18n/angular-locale_fy.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_ga-ie.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ga.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_gd-gb.js |   128 +
 .../js/lib/angular/i18n/angular-locale_gd.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_gl-es.js |   128 +
 .../js/lib/angular/i18n/angular-locale_gl.js    |   128 +
 .../lib/angular/i18n/angular-locale_gsw-ch.js   |   110 +
 .../lib/angular/i18n/angular-locale_gsw-fr.js   |   110 +
 .../lib/angular/i18n/angular-locale_gsw-li.js   |   110 +
 .../js/lib/angular/i18n/angular-locale_gsw.js   |   110 +
 .../js/lib/angular/i18n/angular-locale_gu-in.js |   110 +
 .../js/lib/angular/i18n/angular-locale_gu.js    |   110 +
 .../lib/angular/i18n/angular-locale_guz-ke.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_guz.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_gv-im.js |   128 +
 .../js/lib/angular/i18n/angular-locale_gv.js    |   128 +
 .../angular/i18n/angular-locale_ha-latn-gh.js   |   128 +
 .../angular/i18n/angular-locale_ha-latn-ne.js   |   128 +
 .../angular/i18n/angular-locale_ha-latn-ng.js   |   128 +
 .../lib/angular/i18n/angular-locale_ha-latn.js  |   128 +
 .../js/lib/angular/i18n/angular-locale_ha.js    |   128 +
 .../lib/angular/i18n/angular-locale_haw-us.js   |   110 +
 .../js/lib/angular/i18n/angular-locale_haw.js   |   110 +
 .../js/lib/angular/i18n/angular-locale_he-il.js |   128 +
 .../js/lib/angular/i18n/angular-locale_he.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_hi-in.js |   110 +
 .../js/lib/angular/i18n/angular-locale_hi.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_hr-ba.js |   128 +
 .../js/lib/angular/i18n/angular-locale_hr-hr.js |   128 +
 .../js/lib/angular/i18n/angular-locale_hr.js    |   128 +
 .../lib/angular/i18n/angular-locale_hsb-de.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_hsb.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_hu-hu.js |   110 +
 .../js/lib/angular/i18n/angular-locale_hu.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_hy-am.js |   110 +
 .../js/lib/angular/i18n/angular-locale_hy.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_ia-fr.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ia.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_id-id.js |   110 +
 .../js/lib/angular/i18n/angular-locale_id.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_ig-ng.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ig.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_ii-cn.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ii.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_in.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_is-is.js |   141 +
 .../js/lib/angular/i18n/angular-locale_is.js    |   141 +
 .../js/lib/angular/i18n/angular-locale_it-ch.js |   128 +
 .../js/lib/angular/i18n/angular-locale_it-it.js |   128 +
 .../js/lib/angular/i18n/angular-locale_it-sm.js |   128 +
 .../js/lib/angular/i18n/angular-locale_it.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_iw.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_ja-jp.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ja.js    |   110 +
 .../lib/angular/i18n/angular-locale_jgo-cm.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_jgo.js   |   128 +
 .../lib/angular/i18n/angular-locale_jmc-tz.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_jmc.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_ka-ge.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ka.js    |   110 +
 .../lib/angular/i18n/angular-locale_kab-dz.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_kab.js   |   128 +
 .../lib/angular/i18n/angular-locale_kam-ke.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_kam.js   |   128 +
 .../lib/angular/i18n/angular-locale_kde-tz.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_kde.js   |   128 +
 .../lib/angular/i18n/angular-locale_kea-cv.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_kea.js   |   128 +
 .../lib/angular/i18n/angular-locale_khq-ml.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_khq.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_ki-ke.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ki.js    |   128 +
 .../angular/i18n/angular-locale_kk-cyrl-kz.js   |   110 +
 .../lib/angular/i18n/angular-locale_kk-cyrl.js  |   110 +
 .../js/lib/angular/i18n/angular-locale_kk.js    |   110 +
 .../lib/angular/i18n/angular-locale_kkj-cm.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_kkj.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_kl-gl.js |   128 +
 .../js/lib/angular/i18n/angular-locale_kl.js    |   128 +
 .../lib/angular/i18n/angular-locale_kln-ke.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_kln.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_km-kh.js |   110 +
 .../js/lib/angular/i18n/angular-locale_km.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_kn-in.js |   110 +
 .../js/lib/angular/i18n/angular-locale_kn.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_ko-kp.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ko-kr.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ko.js    |   110 +
 .../lib/angular/i18n/angular-locale_kok-in.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_kok.js   |   128 +
 .../angular/i18n/angular-locale_ks-arab-in.js   |   128 +
 .../lib/angular/i18n/angular-locale_ks-arab.js  |   128 +
 .../js/lib/angular/i18n/angular-locale_ks.js    |   128 +
 .../lib/angular/i18n/angular-locale_ksb-tz.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_ksb.js   |   128 +
 .../lib/angular/i18n/angular-locale_ksf-cm.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_ksf.js   |   128 +
 .../lib/angular/i18n/angular-locale_ksh-de.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_ksh.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_kw-gb.js |   128 +
 .../js/lib/angular/i18n/angular-locale_kw.js    |   128 +
 .../angular/i18n/angular-locale_ky-cyrl-kg.js   |   110 +
 .../lib/angular/i18n/angular-locale_ky-cyrl.js  |   110 +
 .../js/lib/angular/i18n/angular-locale_ky.js    |   110 +
 .../lib/angular/i18n/angular-locale_lag-tz.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_lag.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_lb-lu.js |   128 +
 .../js/lib/angular/i18n/angular-locale_lb.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_lg-ug.js |   128 +
 .../js/lib/angular/i18n/angular-locale_lg.js    |   128 +
 .../lib/angular/i18n/angular-locale_lkt-us.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_lkt.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_ln-ao.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ln-cd.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ln-cf.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ln-cg.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ln.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_lo-la.js |   110 +
 .../js/lib/angular/i18n/angular-locale_lo.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_lt-lt.js |   128 +
 .../js/lib/angular/i18n/angular-locale_lt.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_lu-cd.js |   128 +
 .../js/lib/angular/i18n/angular-locale_lu.js    |   128 +
 .../lib/angular/i18n/angular-locale_luo-ke.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_luo.js   |   128 +
 .../lib/angular/i18n/angular-locale_luy-ke.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_luy.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_lv-lv.js |   128 +
 .../js/lib/angular/i18n/angular-locale_lv.js    |   128 +
 .../lib/angular/i18n/angular-locale_mas-ke.js   |   128 +
 .../lib/angular/i18n/angular-locale_mas-tz.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_mas.js   |   128 +
 .../lib/angular/i18n/angular-locale_mer-ke.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_mer.js   |   128 +
 .../lib/angular/i18n/angular-locale_mfe-mu.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_mfe.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_mg-mg.js |   128 +
 .../js/lib/angular/i18n/angular-locale_mg.js    |   128 +
 .../lib/angular/i18n/angular-locale_mgh-mz.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_mgh.js   |   128 +
 .../lib/angular/i18n/angular-locale_mgo-cm.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_mgo.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_mk-mk.js |   128 +
 .../js/lib/angular/i18n/angular-locale_mk.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_ml-in.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ml.js    |   110 +
 .../angular/i18n/angular-locale_mn-cyrl-mn.js   |   110 +
 .../lib/angular/i18n/angular-locale_mn-cyrl.js  |   110 +
 .../js/lib/angular/i18n/angular-locale_mn.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_mr-in.js |   110 +
 .../js/lib/angular/i18n/angular-locale_mr.js    |   110 +
 .../angular/i18n/angular-locale_ms-latn-bn.js   |   110 +
 .../angular/i18n/angular-locale_ms-latn-my.js   |   110 +
 .../angular/i18n/angular-locale_ms-latn-sg.js   |   110 +
 .../lib/angular/i18n/angular-locale_ms-latn.js  |   110 +
 .../js/lib/angular/i18n/angular-locale_ms.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_mt-mt.js |   110 +
 .../js/lib/angular/i18n/angular-locale_mt.js    |   110 +
 .../lib/angular/i18n/angular-locale_mua-cm.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_mua.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_my-mm.js |   110 +
 .../js/lib/angular/i18n/angular-locale_my.js    |   110 +
 .../lib/angular/i18n/angular-locale_naq-na.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_naq.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_nb-no.js |   110 +
 .../js/lib/angular/i18n/angular-locale_nb-sj.js |   110 +
 .../js/lib/angular/i18n/angular-locale_nb.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_nd-zw.js |   128 +
 .../js/lib/angular/i18n/angular-locale_nd.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_ne-in.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ne-np.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ne.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_nl-aw.js |   128 +
 .../js/lib/angular/i18n/angular-locale_nl-be.js |   128 +
 .../js/lib/angular/i18n/angular-locale_nl-bq.js |   128 +
 .../js/lib/angular/i18n/angular-locale_nl-cw.js |   128 +
 .../js/lib/angular/i18n/angular-locale_nl-nl.js |   128 +
 .../js/lib/angular/i18n/angular-locale_nl-sr.js |   128 +
 .../js/lib/angular/i18n/angular-locale_nl-sx.js |   128 +
 .../js/lib/angular/i18n/angular-locale_nl.js    |   128 +
 .../lib/angular/i18n/angular-locale_nmg-cm.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_nmg.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_nn-no.js |   128 +
 .../js/lib/angular/i18n/angular-locale_nn.js    |   128 +
 .../lib/angular/i18n/angular-locale_nnh-cm.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_nnh.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_no-no.js |   110 +
 .../js/lib/angular/i18n/angular-locale_no.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_nr-za.js |   128 +
 .../js/lib/angular/i18n/angular-locale_nr.js    |   128 +
 .../lib/angular/i18n/angular-locale_nso-za.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_nso.js   |   128 +
 .../lib/angular/i18n/angular-locale_nus-sd.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_nus.js   |   128 +
 .../lib/angular/i18n/angular-locale_nyn-ug.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_nyn.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_om-et.js |   128 +
 .../js/lib/angular/i18n/angular-locale_om-ke.js |   128 +
 .../js/lib/angular/i18n/angular-locale_om.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_or-in.js |   110 +
 .../js/lib/angular/i18n/angular-locale_or.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_os-ge.js |   128 +
 .../js/lib/angular/i18n/angular-locale_os-ru.js |   128 +
 .../js/lib/angular/i18n/angular-locale_os.js    |   128 +
 .../angular/i18n/angular-locale_pa-arab-pk.js   |   110 +
 .../lib/angular/i18n/angular-locale_pa-arab.js  |   110 +
 .../angular/i18n/angular-locale_pa-guru-in.js   |   110 +
 .../lib/angular/i18n/angular-locale_pa-guru.js  |   110 +
 .../js/lib/angular/i18n/angular-locale_pa.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_pl-pl.js |   128 +
 .../js/lib/angular/i18n/angular-locale_pl.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_ps-af.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ps.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_pt-ao.js |   110 +
 .../js/lib/angular/i18n/angular-locale_pt-br.js |   110 +
 .../js/lib/angular/i18n/angular-locale_pt-cv.js |   110 +
 .../js/lib/angular/i18n/angular-locale_pt-gw.js |   110 +
 .../js/lib/angular/i18n/angular-locale_pt-mo.js |   110 +
 .../js/lib/angular/i18n/angular-locale_pt-mz.js |   110 +
 .../js/lib/angular/i18n/angular-locale_pt-pt.js |   110 +
 .../js/lib/angular/i18n/angular-locale_pt-st.js |   110 +
 .../js/lib/angular/i18n/angular-locale_pt-tl.js |   110 +
 .../js/lib/angular/i18n/angular-locale_pt.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_qu-bo.js |   128 +
 .../js/lib/angular/i18n/angular-locale_qu-ec.js |   128 +
 .../js/lib/angular/i18n/angular-locale_qu-pe.js |   128 +
 .../js/lib/angular/i18n/angular-locale_qu.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_rm-ch.js |   128 +
 .../js/lib/angular/i18n/angular-locale_rm.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_rn-bi.js |   128 +
 .../js/lib/angular/i18n/angular-locale_rn.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_ro-md.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ro-ro.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ro.js    |   128 +
 .../lib/angular/i18n/angular-locale_rof-tz.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_rof.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_ru-by.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ru-kg.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ru-kz.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ru-md.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ru-ru.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ru-ua.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ru.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_rw-rw.js |   128 +
 .../js/lib/angular/i18n/angular-locale_rw.js    |   128 +
 .../lib/angular/i18n/angular-locale_rwk-tz.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_rwk.js   |   128 +
 .../lib/angular/i18n/angular-locale_sah-ru.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_sah.js   |   128 +
 .../lib/angular/i18n/angular-locale_saq-ke.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_saq.js   |   128 +
 .../lib/angular/i18n/angular-locale_sbp-tz.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_sbp.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_se-fi.js |   128 +
 .../js/lib/angular/i18n/angular-locale_se-no.js |   128 +
 .../js/lib/angular/i18n/angular-locale_se-se.js |   128 +
 .../js/lib/angular/i18n/angular-locale_se.js    |   128 +
 .../lib/angular/i18n/angular-locale_seh-mz.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_seh.js   |   128 +
 .../lib/angular/i18n/angular-locale_ses-ml.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_ses.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_sg-cf.js |   128 +
 .../js/lib/angular/i18n/angular-locale_sg.js    |   128 +
 .../angular/i18n/angular-locale_shi-latn-ma.js  |   128 +
 .../lib/angular/i18n/angular-locale_shi-latn.js |   128 +
 .../angular/i18n/angular-locale_shi-tfng-ma.js  |   128 +
 .../lib/angular/i18n/angular-locale_shi-tfng.js |   128 +
 .../js/lib/angular/i18n/angular-locale_shi.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_si-lk.js |   128 +
 .../js/lib/angular/i18n/angular-locale_si.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_sk-sk.js |   128 +
 .../js/lib/angular/i18n/angular-locale_sk.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_sl-si.js |   128 +
 .../js/lib/angular/i18n/angular-locale_sl.js    |   128 +
 .../lib/angular/i18n/angular-locale_smn-fi.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_smn.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_sn-zw.js |   128 +
 .../js/lib/angular/i18n/angular-locale_sn.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_so-dj.js |   128 +
 .../js/lib/angular/i18n/angular-locale_so-et.js |   128 +
 .../js/lib/angular/i18n/angular-locale_so-ke.js |   128 +
 .../js/lib/angular/i18n/angular-locale_so-so.js |   128 +
 .../js/lib/angular/i18n/angular-locale_so.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_sq-al.js |   110 +
 .../js/lib/angular/i18n/angular-locale_sq-mk.js |   110 +
 .../js/lib/angular/i18n/angular-locale_sq-xk.js |   110 +
 .../js/lib/angular/i18n/angular-locale_sq.js    |   110 +
 .../angular/i18n/angular-locale_sr-cyrl-ba.js   |   128 +
 .../angular/i18n/angular-locale_sr-cyrl-me.js   |   128 +
 .../angular/i18n/angular-locale_sr-cyrl-rs.js   |   128 +
 .../angular/i18n/angular-locale_sr-cyrl-xk.js   |   128 +
 .../lib/angular/i18n/angular-locale_sr-cyrl.js  |   128 +
 .../angular/i18n/angular-locale_sr-latn-ba.js   |   128 +
 .../angular/i18n/angular-locale_sr-latn-me.js   |   128 +
 .../angular/i18n/angular-locale_sr-latn-rs.js   |   128 +
 .../angular/i18n/angular-locale_sr-latn-xk.js   |   128 +
 .../lib/angular/i18n/angular-locale_sr-latn.js  |   128 +
 .../js/lib/angular/i18n/angular-locale_sr.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_ss-sz.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ss-za.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ss.js    |   128 +
 .../lib/angular/i18n/angular-locale_ssy-er.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_ssy.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_st-ls.js |   115 +
 .../js/lib/angular/i18n/angular-locale_st-za.js |   115 +
 .../js/lib/angular/i18n/angular-locale_st.js    |   115 +
 .../js/lib/angular/i18n/angular-locale_sv-ax.js |   128 +
 .../js/lib/angular/i18n/angular-locale_sv-fi.js |   128 +
 .../js/lib/angular/i18n/angular-locale_sv-se.js |   128 +
 .../js/lib/angular/i18n/angular-locale_sv.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_sw-cd.js |   128 +
 .../js/lib/angular/i18n/angular-locale_sw-ke.js |   128 +
 .../js/lib/angular/i18n/angular-locale_sw-tz.js |   128 +
 .../js/lib/angular/i18n/angular-locale_sw-ug.js |   128 +
 .../js/lib/angular/i18n/angular-locale_sw.js    |   128 +
 .../lib/angular/i18n/angular-locale_swc-cd.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_swc.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_ta-in.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ta-lk.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ta-my.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ta-sg.js |   110 +
 .../js/lib/angular/i18n/angular-locale_ta.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_te-in.js |   110 +
 .../js/lib/angular/i18n/angular-locale_te.js    |   110 +
 .../lib/angular/i18n/angular-locale_teo-ke.js   |   128 +
 .../lib/angular/i18n/angular-locale_teo-ug.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_teo.js   |   128 +
 .../angular/i18n/angular-locale_tg-cyrl-tj.js   |   115 +
 .../lib/angular/i18n/angular-locale_tg-cyrl.js  |   115 +
 .../js/lib/angular/i18n/angular-locale_tg.js    |   115 +
 .../js/lib/angular/i18n/angular-locale_th-th.js |   110 +
 .../js/lib/angular/i18n/angular-locale_th.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_ti-er.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ti-et.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ti.js    |   128 +
 .../lib/angular/i18n/angular-locale_tig-er.js   |   115 +
 .../js/lib/angular/i18n/angular-locale_tig.js   |   115 +
 .../js/lib/angular/i18n/angular-locale_tl.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_tn-bw.js |   128 +
 .../js/lib/angular/i18n/angular-locale_tn-za.js |   128 +
 .../js/lib/angular/i18n/angular-locale_tn.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_to-to.js |   128 +
 .../js/lib/angular/i18n/angular-locale_to.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_tr-cy.js |   110 +
 .../js/lib/angular/i18n/angular-locale_tr-tr.js |   110 +
 .../js/lib/angular/i18n/angular-locale_tr.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_ts-za.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ts.js    |   128 +
 .../lib/angular/i18n/angular-locale_twq-ne.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_twq.js   |   128 +
 .../angular/i18n/angular-locale_tzm-latn-ma.js  |   128 +
 .../lib/angular/i18n/angular-locale_tzm-latn.js |   128 +
 .../js/lib/angular/i18n/angular-locale_tzm.js   |   128 +
 .../angular/i18n/angular-locale_ug-arab-cn.js   |   128 +
 .../lib/angular/i18n/angular-locale_ug-arab.js  |   128 +
 .../js/lib/angular/i18n/angular-locale_ug.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_uk-ua.js |   128 +
 .../js/lib/angular/i18n/angular-locale_uk.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_ur-in.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ur-pk.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ur.js    |   128 +
 .../angular/i18n/angular-locale_uz-arab-af.js   |   110 +
 .../lib/angular/i18n/angular-locale_uz-arab.js  |   110 +
 .../angular/i18n/angular-locale_uz-cyrl-uz.js   |   110 +
 .../lib/angular/i18n/angular-locale_uz-cyrl.js  |   110 +
 .../angular/i18n/angular-locale_uz-latn-uz.js   |   110 +
 .../lib/angular/i18n/angular-locale_uz-latn.js  |   110 +
 .../js/lib/angular/i18n/angular-locale_uz.js    |   110 +
 .../angular/i18n/angular-locale_vai-latn-lr.js  |   128 +
 .../lib/angular/i18n/angular-locale_vai-latn.js |   128 +
 .../angular/i18n/angular-locale_vai-vaii-lr.js  |   128 +
 .../lib/angular/i18n/angular-locale_vai-vaii.js |   128 +
 .../js/lib/angular/i18n/angular-locale_vai.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_ve-za.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ve.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_vi-vn.js |   110 +
 .../js/lib/angular/i18n/angular-locale_vi.js    |   110 +
 .../lib/angular/i18n/angular-locale_vo-001.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_vo.js    |   128 +
 .../lib/angular/i18n/angular-locale_vun-tz.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_vun.js   |   128 +
 .../lib/angular/i18n/angular-locale_wae-ch.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_wae.js   |   128 +
 .../lib/angular/i18n/angular-locale_wal-et.js   |   115 +
 .../js/lib/angular/i18n/angular-locale_wal.js   |   115 +
 .../js/lib/angular/i18n/angular-locale_xh-za.js |   115 +
 .../js/lib/angular/i18n/angular-locale_xh.js    |   115 +
 .../lib/angular/i18n/angular-locale_xog-ug.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_xog.js   |   128 +
 .../lib/angular/i18n/angular-locale_yav-cm.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_yav.js   |   128 +
 .../lib/angular/i18n/angular-locale_yi-001.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_yi.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_yo-bj.js |   128 +
 .../js/lib/angular/i18n/angular-locale_yo-ng.js |   128 +
 .../js/lib/angular/i18n/angular-locale_yo.js    |   128 +
 .../lib/angular/i18n/angular-locale_zgh-ma.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_zgh.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_zh-cn.js |   110 +
 .../angular/i18n/angular-locale_zh-hans-cn.js   |   110 +
 .../angular/i18n/angular-locale_zh-hans-hk.js   |   110 +
 .../angular/i18n/angular-locale_zh-hans-mo.js   |   110 +
 .../angular/i18n/angular-locale_zh-hans-sg.js   |   110 +
 .../lib/angular/i18n/angular-locale_zh-hans.js  |   110 +
 .../angular/i18n/angular-locale_zh-hant-hk.js   |   110 +
 .../angular/i18n/angular-locale_zh-hant-mo.js   |   110 +
 .../angular/i18n/angular-locale_zh-hant-tw.js   |   110 +
 .../lib/angular/i18n/angular-locale_zh-hant.js  |   110 +
 .../js/lib/angular/i18n/angular-locale_zh-hk.js |   110 +
 .../js/lib/angular/i18n/angular-locale_zh-tw.js |   110 +
 .../js/lib/angular/i18n/angular-locale_zh.js    |   110 +
 .../js/lib/angular/i18n/angular-locale_zu-za.js |   110 +
 .../js/lib/angular/i18n/angular-locale_zu.js    |   110 +
 .../src/main/webapp/js/lib/angular/version.json |     1 +
 .../src/main/webapp/js/lib/angular/version.txt  |     1 +
 .../js/lib/ui-bootstrap-tpls-0.13.3.min.js      |    10 +
 .../src/main/webapp/js/services/DataService.js  |   102 +
 .../src/main/webapp/partials/order-detail.html  |    22 +
 .../src/main/webapp/partials/order-form.html    |    46 +
 .../src/main/webapp/partials/orders.html        |    25 +
 .../struts/actions/IndexControllerTest.java     |    30 +
 .../actions/data/OrderControllerTest.java       |   110 +
 rest-angular/src/test/resources/log4j2.xml      |    14 +
 833 files changed, 180863 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index ebc876f..7e803d3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -66,6 +66,7 @@
         <module>message-resource</module>
         <module>preparable-interface</module>
         <module>restful2actionmapper</module>
+        <module>rest-angular</module>
         <module>spring-struts</module>
         <module>themes</module>
         <module>themes-override</module>
@@ -96,10 +97,10 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
-                <version>2.3.2</version>
+                <version>3.3</version>
                 <configuration>
-                    <source>1.7</source>
-                    <target>1.7</target>
+                    <source>1.8</source>
+                    <target>1.8</target>
                 </configuration>
             </plugin>
         </plugins>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/pom.xml
----------------------------------------------------------------------
diff --git a/rest-angular/pom.xml b/rest-angular/pom.xml
new file mode 100644
index 0000000..395073a
--- /dev/null
+++ b/rest-angular/pom.xml
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>struts.apache.org</groupId>
+        <artifactId>struts2examples</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>rest-angular</artifactId>
+
+    <name>REST Plugin based application with AngularJS frontend</name>
+
+    <description>A REST Plugin based Struts2 application with AngularJS frontend, Bean validation, Exception Handling and multi language support.</description>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-core</artifactId>
+            <version>${struts2.version}</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>asm</artifactId>
+                    <groupId>asm</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>asm-commons</artifactId>
+                    <groupId>asm</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-java8-support-plugin</artifactId>
+            <version>${struts2.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-convention-plugin</artifactId>
+            <version>${struts2.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-rest-plugin</artifactId>
+            <version>${struts2.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-junit-plugin</artifactId>
+            <version>${struts2.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest-all</artifactId>
+            <version>1.3</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-bean-validation-plugin</artifactId>
+            <version>${struts2.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-validator</artifactId>
+            <version>4.3.2.Final</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-core</artifactId>
+            <version>2.6.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+            <version>2.6.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <version>2.6.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-core</artifactId>
+            <version>${log4j2.version}</version>
+        </dependency>
+
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.5</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.jayway.jsonpath</groupId>
+            <artifactId>json-path</artifactId>
+            <version>2.0.0</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+            <version>3.1.0</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>jsp-api</artifactId>
+            <version>2.0</version>
+            <scope>provided</scope>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>com.cj.jshintmojo</groupId>
+                <artifactId>jshint-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>lint</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <configFile>src/main/resources/jshint.conf.js</configFile>
+                    <directories>
+                        <directory>src/main/webapp/js/</directory>
+                    </directories>
+                    <excludes>
+                        <exclude>src/main/webapp/js/lib</exclude>
+                    </excludes>
+                    <reporter>jslint</reporter>
+                    <reportFile>target/jshint.xml</reportFile>
+                    <failOnError>true</failOnError>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>com.samaxes.maven</groupId>
+                <artifactId>minify-maven-plugin</artifactId>
+                <version>1.7.4</version>
+                <executions>
+                    <execution>
+                        <id>external-minify</id>
+                        <phase>package</phase>
+                        <configuration>
+                            <jsEngine>CLOSURE</jsEngine>
+                            <closureLanguage>ECMASCRIPT5_STRICT</closureLanguage>
+                            <skipMinify>true</skipMinify>
+                            <jsFinalFile>external.js</jsFinalFile>
+                            <jsSourceFiles>
+                                <jsSourceFile>lib/angular/angular.min.js</jsSourceFile>
+                                <jsSourceFile>lib/angular/angular-route.min.js</jsSourceFile>
+                                <jsSourceFile>lib/ui-bootstrap-tpls-0.13.3.min.js</jsSourceFile>
+                                <jsSourceFile>lib/angular-translate.min.js</jsSourceFile>
+                                <jsSourceFile>lib/angular-translate-loader-url.min.js</jsSourceFile>
+                            </jsSourceFiles>
+                        </configuration>
+                        <goals>
+                            <goal>minify</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>application-minify</id>
+                        <phase>package</phase>
+                        <configuration>
+                            <jsEngine>CLOSURE</jsEngine>
+                            <closureLanguage>ECMASCRIPT5_STRICT</closureLanguage>
+                            <jsFinalFile>application.js</jsFinalFile>
+                            <jsSourceFiles>
+                                <jsSourceFile>app.js</jsSourceFile>
+                                <jsSourceFile>config.js</jsSourceFile>
+                            </jsSourceFiles>
+                            <jsSourceIncludes>
+                                <jsSourceInclude>services/*.js</jsSourceInclude>
+                                <jsSourceInclude>controllers/*.js</jsSourceInclude>
+                            </jsSourceIncludes>
+
+                        </configuration>
+                        <goals>
+                            <goal>minify</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.eclipse.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>9.3.3.v20150827</version>
+                <configuration>
+                    <webApp>
+                        <contextPath>/${artifactId}</contextPath>
+                    </webApp>
+                    <stopKey>CTRL+C</stopKey>
+                    <stopPort>8999</stopPort>
+                    <scanIntervalSeconds>10</scanIntervalSeconds>
+                    <webAppSourceDirectory>${basedir}/src/main/webapp/</webAppSourceDirectory>
+                    <webAppConfig>
+                        <descriptor>${basedir}/src/main/webapp/WEB-INF/web.xml</descriptor>
+                    </webAppConfig>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/java/org/apache/examples/struts/actions/IndexController.java
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/java/org/apache/examples/struts/actions/IndexController.java b/rest-angular/src/main/java/org/apache/examples/struts/actions/IndexController.java
new file mode 100644
index 0000000..126e422
--- /dev/null
+++ b/rest-angular/src/main/java/org/apache/examples/struts/actions/IndexController.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.examples.struts.actions;
+
+import com.opensymphony.xwork2.Action;
+import org.apache.struts2.rest.DefaultHttpHeaders;
+import org.apache.struts2.rest.HttpHeaders;
+import org.apache.struts2.rest.RestActionSupport;
+
+public class IndexController extends RestActionSupport {
+
+    private static final long serialVersionUID = 6153177836211979662L;
+
+    private boolean useMinifiedResources = false;
+
+    public HttpHeaders index() {
+        return new DefaultHttpHeaders("index")
+                .disableCaching();
+    }
+
+    public HttpHeaders show() {
+        return new DefaultHttpHeaders("show");
+    }
+
+    public String edit() {
+        return Action.SUCCESS;
+    }
+
+    public String editNew() {
+        return Action.SUCCESS;
+    }
+
+    public boolean isUseMinifiedResources() {
+        return useMinifiedResources;
+    }
+
+    public void setUseMinifiedResources(boolean useMinifiedResources) {
+        this.useMinifiedResources = useMinifiedResources;
+    }
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/java/org/apache/examples/struts/actions/data/LanguageController.java
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/java/org/apache/examples/struts/actions/data/LanguageController.java b/rest-angular/src/main/java/org/apache/examples/struts/actions/data/LanguageController.java
new file mode 100644
index 0000000..1fa09a5
--- /dev/null
+++ b/rest-angular/src/main/java/org/apache/examples/struts/actions/data/LanguageController.java
@@ -0,0 +1,41 @@
+package org.apache.examples.struts.actions.data;
+
+import com.opensymphony.xwork2.Action;
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.ModelDriven;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.struts2.rest.RestActionSupport;
+
+import java.util.Locale;
+import java.util.Map;
+import java.util.ResourceBundle;
+import java.util.stream.Collectors;
+
+public class LanguageController extends RestActionSupport implements ModelDriven<Map<String, String>> {
+
+    private static final Logger log = LogManager.getLogger(LanguageController.class);
+
+    private Map<String, String> model;
+
+    public String index() throws Exception {
+
+        Locale locale = ActionContext.getContext().getLocale();
+        log.debug("Get texts resources for locale: {}", locale);
+
+        ResourceBundle bundle = getTexts("frontend");
+        this.model = bundle.keySet()
+                .stream()
+                .collect(Collectors.toMap(
+                        key -> key,
+                        bundle::getString));
+
+        return Action.SUCCESS;
+    }
+
+
+    @Override
+    public Map<String, String> getModel() {
+        return model;
+    }
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/java/org/apache/examples/struts/actions/data/OrderController.java
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/java/org/apache/examples/struts/actions/data/OrderController.java b/rest-angular/src/main/java/org/apache/examples/struts/actions/data/OrderController.java
new file mode 100644
index 0000000..5b6aefb
--- /dev/null
+++ b/rest-angular/src/main/java/org/apache/examples/struts/actions/data/OrderController.java
@@ -0,0 +1,80 @@
+package org.apache.examples.struts.actions.data;
+
+import com.opensymphony.xwork2.ModelDriven;
+import org.apache.examples.struts.models.Order;
+import org.apache.examples.struts.services.OrdersService;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.struts2.rest.DefaultHttpHeaders;
+import org.apache.struts2.rest.HttpHeaders;
+import org.apache.struts2.rest.RestActionSupport;
+
+import java.util.Collection;
+
+public class OrderController extends RestActionSupport implements ModelDriven<Object> {
+
+    private static final Logger log = LogManager.getLogger(OrderController.class);
+
+    private Order model = new Order();
+    private String id;
+    private Collection<Order> list = null;
+    private OrdersService ordersService = new OrdersService();
+
+    // GET /data/order/1
+    public HttpHeaders show() {
+        return new DefaultHttpHeaders("show");
+    }
+
+    // GET /data/order
+    public HttpHeaders index() {
+        list = ordersService.getAll();
+        return new DefaultHttpHeaders("index")
+            .disableCaching();
+    }
+
+    // DELETE /data/order/1
+    public String destroy() {
+        log.debug("Delete order with id: {}", id);
+
+        // To demonstrate exception handling we throw an exception when someone tries to delete an order
+        if(id != null) {
+            throw new RuntimeException(getText("exception.operation.not.supported"));
+        }
+
+        ordersService.remove(id);
+        return "success";
+    }
+
+    // POST /data/order
+    public HttpHeaders create() {
+        log.debug("Create new order: {}", model);
+        ordersService.save(model);
+        return new DefaultHttpHeaders("success")
+            .setLocationId(model.getId());
+    }
+
+    // PUT /data/order/1
+    public String update() {
+        log.debug("Update order: {}", model);
+        ordersService.save(model);
+        return "success";
+    }
+
+    public void setId(String id) {
+        if (id != null) {
+            this.model = ordersService.get(id);
+        }
+        this.id = id;
+    }
+    
+    public Object getModel() {
+        if(list != null) {
+            return list;
+        } else {
+            if(model == null) {
+                model = new Order();
+            }
+            return model;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/java/org/apache/examples/struts/actions/data/package-info.java
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/java/org/apache/examples/struts/actions/data/package-info.java b/rest-angular/src/main/java/org/apache/examples/struts/actions/data/package-info.java
new file mode 100644
index 0000000..fdd45c0
--- /dev/null
+++ b/rest-angular/src/main/java/org/apache/examples/struts/actions/data/package-info.java
@@ -0,0 +1,6 @@
+@ParentPackage("data")
+@Namespace("/data")
+package org.apache.examples.struts.actions.data;
+
+import org.apache.struts2.convention.annotation.Namespace;
+import org.apache.struts2.convention.annotation.ParentPackage;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/java/org/apache/examples/struts/interceptors/ExceptionHandlerInterceptor.java
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/java/org/apache/examples/struts/interceptors/ExceptionHandlerInterceptor.java b/rest-angular/src/main/java/org/apache/examples/struts/interceptors/ExceptionHandlerInterceptor.java
new file mode 100644
index 0000000..a5c4d38
--- /dev/null
+++ b/rest-angular/src/main/java/org/apache/examples/struts/interceptors/ExceptionHandlerInterceptor.java
@@ -0,0 +1,52 @@
+package org.apache.examples.struts.interceptors;
+
+import com.opensymphony.xwork2.Action;
+import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.inject.Inject;
+import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.struts2.rest.ContentTypeHandlerManager;
+import org.apache.struts2.rest.DefaultHttpHeaders;
+import org.apache.struts2.rest.HttpHeaders;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ExceptionHandlerInterceptor extends MethodFilterInterceptor {
+
+    private static final Logger log = LogManager.getLogger(ExceptionHandlerInterceptor.class);
+
+    private static final String ACTION_ERROR = "actionError";
+
+    private ContentTypeHandlerManager manager;
+
+    @Inject
+    public void setContentTypeHandlerManager(ContentTypeHandlerManager mgr) {
+        this.manager = mgr;
+    }
+
+    @Override
+    protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
+        try{
+            return actionInvocation.invoke();
+        } catch (Exception exception){
+            log.warn("Exception occurred: {}", exception.getMessage());
+            Map<String, Object> errors = new HashMap<>();
+
+            HttpHeaders httpHeaders = new DefaultHttpHeaders()
+                    .disableCaching()
+                    .withStatus(HttpServletResponse.SC_BAD_REQUEST)
+                    .renderResult(Action.INPUT);
+
+                if(exception instanceof SecurityException) {
+                    errors.put(ACTION_ERROR, "Operation not allowed!");
+                    httpHeaders.setStatus(HttpServletResponse.SC_FORBIDDEN);
+                }  else {
+                    errors.put(ACTION_ERROR, exception.getMessage());
+                }
+            return manager.handleResult(actionInvocation.getProxy().getConfig(), httpHeaders, errors);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/java/org/apache/examples/struts/models/Order.java
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/java/org/apache/examples/struts/models/Order.java b/rest-angular/src/main/java/org/apache/examples/struts/models/Order.java
new file mode 100644
index 0000000..a71303f
--- /dev/null
+++ b/rest-angular/src/main/java/org/apache/examples/struts/models/Order.java
@@ -0,0 +1,86 @@
+package org.apache.examples.struts.models;
+
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.hibernate.validator.constraints.NotBlank;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+
+public class Order {
+
+
+    String id;
+
+    @NotBlank(message = "validation.order.client")
+    String clientName;
+
+    @Min(value = 10, message = "validation.order.amount")
+    @Max(value = 666, message = "validation.order.amount")
+    int amount;
+    
+    public Order() {}
+    
+    public Order(String id, String clientName, int amount) {
+        super();
+        this.id = id;
+        this.clientName = clientName;
+        this.amount = amount;
+    }
+    public int getAmount() {
+        return amount;
+    }
+    public void setAmount(int amount) {
+        this.amount = amount;
+    }
+    public String getClientName() {
+        return clientName;
+    }
+    public void setClientName(String clientName) {
+        this.clientName = clientName;
+    }
+    public String getId() {
+        return id;
+    }
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (obj == this) {
+            return true;
+        }
+        if (obj.getClass() != getClass()) {
+            return false;
+        }
+        Order rhs = (Order) obj;
+        return new EqualsBuilder()
+                .append(this.id, rhs.id)
+                .append(this.clientName, rhs.clientName)
+                .append(this.amount, rhs.amount)
+                .isEquals();
+    }
+
+    @Override
+    public int hashCode() {
+        return new HashCodeBuilder()
+                .append(id)
+                .append(clientName)
+                .append(amount)
+                .toHashCode();
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this)
+                .append("id", id)
+                .append("clientName", clientName)
+                .append("amount", amount)
+                .toString();
+    }
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/java/org/apache/examples/struts/services/OrdersService.java
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/java/org/apache/examples/struts/services/OrdersService.java b/rest-angular/src/main/java/org/apache/examples/struts/services/OrdersService.java
new file mode 100644
index 0000000..47e63aa
--- /dev/null
+++ b/rest-angular/src/main/java/org/apache/examples/struts/services/OrdersService.java
@@ -0,0 +1,41 @@
+package org.apache.examples.struts.services;
+
+import org.apache.examples.struts.models.Order;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class OrdersService {
+
+    private static Map<String,Order> orders = new HashMap<>();
+    private static int nextId = 6;
+    static {
+        orders.put("3", new Order("3", "Bob", 33));
+        orders.put("4", new Order("4", "Sarah", 44));
+        orders.put("5", new Order("5", "Jim", 66));
+    }
+
+    public Order get(String id) {
+        return orders.get(id);
+    }
+
+    public List<Order> getAll() {
+        return new ArrayList<>(orders.values());
+    }
+
+    public void save(Order order) {
+        if (order.getId() == null) {
+            order.setId(String.valueOf(nextId++));
+        }
+
+        orders.put(order.getId(), order);
+    }
+
+    public void remove(String id) {
+        orders.remove(id);
+        //throw new RuntimeException("Order remove currently not supported!");
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/resources/exceptions_de.properties
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/resources/exceptions_de.properties b/rest-angular/src/main/resources/exceptions_de.properties
new file mode 100644
index 0000000..f704e35
--- /dev/null
+++ b/rest-angular/src/main/resources/exceptions_de.properties
@@ -0,0 +1 @@
+exception.operation.not.supported = L\u00F6schen ist zur Zeit nicht unterst\u00FCtzt\!

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/resources/exceptions_en.properties
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/resources/exceptions_en.properties b/rest-angular/src/main/resources/exceptions_en.properties
new file mode 100644
index 0000000..d5cb4bf
--- /dev/null
+++ b/rest-angular/src/main/resources/exceptions_en.properties
@@ -0,0 +1 @@
+exception.operation.not.supported = Delete is currently not supported\!

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/resources/frontend_de.properties
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/resources/frontend_de.properties b/rest-angular/src/main/resources/frontend_de.properties
new file mode 100644
index 0000000..62c1066
--- /dev/null
+++ b/rest-angular/src/main/resources/frontend_de.properties
@@ -0,0 +1,16 @@
+app.name=Struts2 Bestellverwaltung
+
+orders = Bestellungen
+orders.edit = Bearbeiten
+orders.view = Ansehen
+orders.delete = L\u00F6schen
+orders.new = Neue Bestellung erstellen
+orders.back = Zur Bestell\u00FCbersicht
+
+order = Bestellung
+order.new = Neue Bestellung
+order.edit = Bearbeite Bestellung
+order.client = Kunde
+order.amount = Anzahl
+
+save = Speichern

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/resources/frontend_en.properties
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/resources/frontend_en.properties b/rest-angular/src/main/resources/frontend_en.properties
new file mode 100644
index 0000000..0ab07e4
--- /dev/null
+++ b/rest-angular/src/main/resources/frontend_en.properties
@@ -0,0 +1,16 @@
+app.name=Struts2 Order Manager
+
+orders = Orders
+orders.edit = Edit
+orders.view = View
+orders.delete = Delete
+orders.new = Create a new order
+orders.back = Back to Orders
+
+order = Order
+order.new = New Order
+order.edit = Edit Order
+order.client = Client
+order.amount = Amount
+
+save = Save

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/resources/jshint.conf.js
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/resources/jshint.conf.js b/rest-angular/src/main/resources/jshint.conf.js
new file mode 100644
index 0000000..350b03a
--- /dev/null
+++ b/rest-angular/src/main/resources/jshint.conf.js
@@ -0,0 +1,13 @@
+{
+    "maxparams": 5,
+    "indent": true,
+    "camelcase": true,
+    "eqeqeq": true,
+    "forin": true,
+    "immed": true,
+    "latedef": false,
+    "noarg": true,
+    "noempty": true,
+    "nonew": true,
+    "globals": {}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/resources/log4j2.xml
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/resources/log4j2.xml b/rest-angular/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..712b825
--- /dev/null
+++ b/rest-angular/src/main/resources/log4j2.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration>
+    <Appenders>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
+        </Console>
+    </Appenders>
+    <Loggers>
+        <Logger name="com.opensymphony.xwork2" level="debug"/>
+        <Logger name="org.apache.struts2" level="debug"/>
+        <Logger name="org.apache.examples.struts" level="debug"/>
+        <Root level="warn">
+            <AppenderRef ref="STDOUT"/>
+        </Root>
+    </Loggers>
+</Configuration>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/resources/struts.xml b/rest-angular/src/main/resources/struts.xml
new file mode 100644
index 0000000..950f0f2
--- /dev/null
+++ b/rest-angular/src/main/resources/struts.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE struts PUBLIC
+        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
+        "http://struts.apache.org/dtds/struts-2.5.dtd">
+<struts>
+
+    <constant name="struts.enable.DynamicMethodInvocation" value="false"/>
+
+    <!-- Disable dev mode in productions -->
+    <constant name="struts.devMode" value="false"/>
+    <constant name="struts.handle.exception" value="false"/>
+
+    <!--  Overwrite Convention -->
+    <constant name="struts.convention.action.suffix" value="Controller"/>
+    <constant name="struts.convention.action.mapAllMatches" value="true"/>
+    <constant name="struts.convention.package.locators" value="actions"/>
+    <constant name="struts.convention.default.parent.package" value="rest-angular"/>
+    <constant name="struts.action.extension" value=",,xml,json,action"/>
+
+    <constant name="struts.custom.i18n.resources" value="frontend,validation,exceptions"/>
+
+    <constant name="struts.mapper.class" value="rest"/>
+
+    <!-- Use Jackson lib as content handler for all JSON requests -->
+    <bean type="org.apache.struts2.rest.handler.ContentTypeHandler" name="jackson" class="org.apache.struts2.rest.handler.JacksonLibHandler"/>
+    <constant name="struts.rest.handlerOverride.json" value="jackson"/>
+
+    <!-- Set to false if the json content can be returned for any kind of http method -->
+    <constant name="struts.rest.content.restrictToGET" value="false"/>
+
+    <!-- Set validation failure status code -->
+    <constant name="struts.rest.validationFailureStatusCode" value="406"/>
+
+
+    <!-- Set encoding to UTF-8, default is ISO-8859-1 -->
+    <constant name="struts.i18n.encoding" value="UTF-8"/>
+    <package name="rest-angular" extends="rest-default">
+        <default-action-ref name="index" />
+        <global-allowed-methods>index,show,create,update,destroy</global-allowed-methods>
+    </package>
+    <package name="data" extends="rest-angular" namespace="/data">
+        <interceptors>
+            <!-- See BaseDataController -->
+            <interceptor name="dataError" class="org.apache.examples.struts.interceptors.ExceptionHandlerInterceptor"/>
+            <interceptor name="beanValidation" class="org.apache.struts.beanvalidation.validation.interceptor.BeanValidationInterceptor"/>
+
+            <interceptor-stack name="dataDefaultStack">
+                <interceptor-ref name="dataError"/>
+                <interceptor-ref name="alias"/>
+                <interceptor-ref name="servletConfig"/>
+                <interceptor-ref name="messages">
+                    <param name="operationMode">AUTOMATIC</param>
+                </interceptor-ref>
+                <interceptor-ref name="prepare"/>
+                <interceptor-ref name="i18n"/>
+                <interceptor-ref name="chain"/>
+                <interceptor-ref name="actionMappingParams"/>
+                <interceptor-ref name="scopedModelDriven"/>
+                <interceptor-ref name="modelDriven">
+                    <param name="refreshModelBeforeResult">true</param>
+                </interceptor-ref>
+                <interceptor-ref name="fileUpload"/>
+                <interceptor-ref name="checkbox"/>
+                <interceptor-ref name="staticParams"/>
+                <interceptor-ref name="params"/>
+                <interceptor-ref name="rest" />
+                <interceptor-ref name="conversionError"/>
+                <interceptor-ref name="beanValidation">
+                    <param name="excludeMethods">input,back,cancel,browse,index,show,edit,editNew</param>
+                </interceptor-ref>
+                <interceptor-ref name="restWorkflow">
+                    <param name="excludeMethods">input,back,cancel,browse,index,show,edit,editNew</param>
+                </interceptor-ref>
+            </interceptor-stack>
+
+        </interceptors>
+
+        <default-interceptor-ref name="dataDefaultStack"/>
+
+    </package>
+
+</struts>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/resources/validation_de.properties
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/resources/validation_de.properties b/rest-angular/src/main/resources/validation_de.properties
new file mode 100644
index 0000000..269740b
--- /dev/null
+++ b/rest-angular/src/main/resources/validation_de.properties
@@ -0,0 +1,2 @@
+validation.order.client = Kunden Name darf nicht leer sein
+validation.order.amount = Anzahl muss zwischen 10 und 666 sein

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/resources/validation_en.properties
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/resources/validation_en.properties b/rest-angular/src/main/resources/validation_en.properties
new file mode 100644
index 0000000..a1e8e9c
--- /dev/null
+++ b/rest-angular/src/main/resources/validation_en.properties
@@ -0,0 +1,2 @@
+validation.order.client = Client name can not be blank
+validation.order.amount = Order amount needs to be between 10 and 666