可以角度.js与JSTL表达式语言进行通信

Can angular.js communicate with JSTL expression language?

本文关键字:语言 表达式 通信 JSTL js      更新时间:2023-09-26

angular.js可以与JSTL表达式语言通信吗?我想使用数组创建 ng 选项。像这样:

<select ng-model="detail" ng-init="Categories = '${Categories}'" ng-options="'${Category.code}' for Category in Categories">
 

不可能有角度-JSTL通信这样的东西,但你仍然可以实现你想要的东西。JSP将在服务器端进行评估,生成一个最终的静态HTML,以发送到客户端,Angular应用程序在那里发挥其魔力。因此,JSTL是在服务器端评估的,Angular应用程序不可能与它"通信"。

在您的情况下,假设您像这样分配了这些变量:

Categories = '[{"code": "foo", ...}, {"code": "bar", ...}]'

现在,您的 JSP 包含以下行:

<select ng-model="detail" ng-init="Categories = '${Categories}'" ng-options="'${Category.code}' for Category in Categories">

一旦JSP被评估,Angular会发现是这样的:

<select ng-model="detail" ng-init="Categories = '[{"code": "foo", ...}, {"code": "bar", ...}]'" ng-options="'' for Category in Categories">

这可能接近您想要做的事情,但我认为解决这个问题的方法是:

.JSP:

window.categories = ${Categories};

这是假设您的类别变量是 JSON。如果不是,你可能必须使用Jackson将其转换为JSON,或通过JSTL手动(我鼓励你不要这样做(。现在,你有一个包含任何类别的javascript变量,所以你可以使用常规的Angular逻辑来迭代它。

假设你有一个看起来像这样的 FooController :

angular.module("controllers")
    .controller("FooController", [
      "$scope",
      "$window",
      function($scope, $window) {
        $scope.categories = $window.categories;
      }
    ]);

现在,您的类别已在范围内,因此您可以在视图中使用它们,如下所示:

<select ng-model="detail" ng-options="'category.code for category in categories">
我相信

答案是肯定的(我很想测试一下,但我现在有点束手无策(。 JSTL在服务器端处理以呈现HTML(以及其他内容(。AngularJS是在客户端处理的东西。

因此,我的理解是,在上面给出的示例中,"类别"属性将设置为${Categories} JSTL EL评估的字符串输出。