如何在javascript中添加条件块

如何在javascript中添加条件块,javascript,thymeleaf,Javascript,Thymeleaf,我有一个web应用程序,使用Thymeleaf和spring boot,我需要在javascript中包含一个选项,以防用户的语言环境是阿拉伯语,那么如何添加条件块并在服务器端进行处理呢 <script th:inline="javascript"> var customerNameTitle = /*[[#{pendingPayments.customerName}]]*/ 'customer Name'; var amountTitle = /*[

我有一个web应用程序,使用Thymeleaf和spring boot,我需要在javascript中包含一个选项,以防用户的语言环境是阿拉伯语,那么如何添加条件块并在服务器端进行处理呢

<script th:inline="javascript">
        var customerNameTitle = /*[[#{pendingPayments.customerName}]]*/ 'customer Name';
        var amountTitle = /*[[#{pendingPayments.amount}]]*/ 'Amount';
        var paymentDateTitle = /*[[#{pendingPayments.paymentDate}]]*/ 'payment Date';
        var submissionDateTitle = /*[[#{pendingPayments.submissionDate}]]*/ 'submission Date';

        $("document").ready(function(e) {
            /*<![CDATA[*/
               var table = $("#example").DataTable( {
                    "ajax": {
                                "url": /*[[@{/payments/getPendingPayments}]]*/ "",
                                "type": "GET",
                                "dataSrc": ""
                            },
                    "columns": [
                                { "data": "customerFullName", "title": customerNameTitle },
                                { "data": "amount", "title": amountTitle },
                                { "data": "paymentDate", "title": paymentDateTitle },
                                { "data": "submissionDate", "title": submissionDateTitle },
                            ],
                    "language": {
                                "emptyTable": /*[[#{pendingPayments.emptyTable}]]*/ "",
                                "url":/*[[@{'/json/dataTables-ar.json'}]]*/ ""
                              }
                });
            /*]]>*/
           });
    </script>

百里香有没有等效的

我找不到这样做的方法,但是你也可以这样做

使用所需的表达式定义js变量并使用它

var condition = /*[[${LOCALE.language eq 'ar' }]]*/ 'true';

$("document").ready(function(e) {
        /*<![CDATA[*/
        if( condition) {
           var table = $("#example").DataTable( {
                "ajax": {
                            "url": /*[[@{/payments/getPendingPayments}]]*/ "",
                            "type": "GET",
                            "dataSrc": ""
                        },
                "columns": [
                            { "data": "customerFullName", "title": customerNameTitle },
                            { "data": "amount", "title": amountTitle },
                            { "data": "paymentDate", "title": paymentDateTitle },
                            { "data": "submissionDate", "title": submissionDateTitle },
                        ],
                "language": {
                            "emptyTable": /*[[#{pendingPayments.emptyTable}]]*/ "",
                            "url":/*[[@{'/json/dataTables-ar.json'}]]*/ ""
                          }
            });
        }
        else {
          var table = $("#example").DataTable( {
                "ajax": {
                            "url": /*[[@{/payments/getPendingPayments}]]*/ "",
                            "type": "GET",
                            "dataSrc": ""
                        },
                "columns": [
                            { "data": "customerFullName", "title": customerNameTitle },
                            { "data": "amount", "title": amountTitle },
                            { "data": "paymentDate", "title": paymentDateTitle },
                            { "data": "submissionDate", "title": submissionDateTitle },
                        ],
                "language": {
                            "emptyTable": /*[[#{pendingPayments.emptyTable}]]*/ ""
                          }
            });
        }
        /*]]>*/
       });
var条件=/*[${LOCALE.language eq'ar'}]*/'true';
$(“文件”)。就绪(功能(e){
/**/
});

摘自Thymeleaf教程:

表达式基本对象

在对上下文变量计算OGNL表达式时,有些 对象可用于表达式以获得更高的灵活性。 这些对象将从开始引用(根据OGNL标准)
#符号:
#区域设置:上下文区域设置…

OGNL代表对象图导航语言。因此,实际使用情况如下所示:

<span th:text="${#locale.country}">Should give you Country (in my case HR)</span> 
<span th:text="${#ctx.locale}">Should give you the code (in my case hr_HR)</span>
<span th:text="${#locale.country}=='ar' ? 'Arabic' : 'Not Arabic'"></span>
<span th:text="${#strings.startsWith(#ctx.locale, 'ar')? 'Arabic' : 'Not Arabic'}></span>
应该给你国家/地区(在我的情况下是HR)
应该给你代码(在我的情况下是hr\u hr)
或者像这样更好:

<span th:text="${#locale.country}">Should give you Country (in my case HR)</span> 
<span th:text="${#ctx.locale}">Should give you the code (in my case hr_HR)</span>
<span th:text="${#locale.country}=='ar' ? 'Arabic' : 'Not Arabic'"></span>
<span th:text="${#strings.startsWith(#ctx.locale, 'ar')? 'Arabic' : 'Not Arabic'}></span>

我在Thymeleaf 2中找到的最接近的方法是在整个
标记中添加
th:if
条件。然后,您可以有多个
标记,但当然会涉及到复制粘贴

此功能在Thymeleaf 3中提供

<script th:inline="javascript">
    var customerNameTitle = /*[[#{pendingPayments.customerName}]]*/ 'customer Name';
    var amountTitle = /*[[#{pendingPayments.amount}]]*/ 'Amount';
    var paymentDateTitle = /*[[#{pendingPayments.paymentDate}]]*/ 'payment Date';
    var submissionDateTitle = /*[[#{pendingPayments.submissionDate}]]*/ 'submission Date';

    $("document").ready(function(e) {
        /*<![CDATA[*/
           var table = $("#example").DataTable( {
                "ajax": {
                            // Using textual syntax from Thymeleaf 3
                            // (not sure about the exact condition for your case
                            // but this is the syntax to use)
                            [# th:if="${LOCALE.language.equals('ar') }"]
                            "url": /*[[@{/payments/getPendingPayments}]]*/ "",
                            [/]
                            "type": "GET",
                            "dataSrc": ""
                        },
                "columns": [
                            { "data": "customerFullName", "title": customerNameTitle },
                            { "data": "amount", "title": amountTitle },
                            { "data": "paymentDate", "title": paymentDateTitle },
                            { "data": "submissionDate", "title": submissionDateTitle },
                        ],
                "language": {
                            "emptyTable": /*[[#{pendingPayments.emptyTable}]]*/ "",
                            "url":/*[[@{'/json/dataTables-ar.json'}]]*/ ""
                          }
            });
        /*]]>*/
       });
</script>

var customerNameTitle=/*[#{pendingPayments.customerName}]*/'客户名称';
var amountTitle=/*[#{pendingPayments.amount}]*/'amount';
var paymentDateTitle=/*[#{pendingPayments.paymentDate}]*/'付款日期';
var submissionDateTitle=/*[#{pendingPayments.submissionDate}]*/'提交日期';
$(“文件”)。就绪(功能(e){
/**/
});

请参见

中的Thymeleaf文本语法,尽管这是一个老问题,但以下内容对我们有用

    <script th:inline="javascript">
    /*<![CDATA[*/
      var isInlineEdit = [[${param.isInlineEdit} != null ? true:false]];

      if(isInlineEdit){
        //in line edit code
      }else{
        //no in line edit
      }
    /*]]>*/
    </script>

/**/

我需要在javascript中使用它,无论整行(“url”:…)是否存在,我已经在使用标签本地化,但这是在dataTables中。您是否尝试过类似的内容:“'url:”([${{strings.startsWith(#ctx.locale,'ar')}])/*[[@{'/json/dataTables-ar.json'}]*/:“”“添加三元表达式,因此,如果区域设置为ar,它将返回提供的url,如果不是,它将返回空字符串……考虑一下,但我觉得它并不优雅!JavaScript自然模板也适用于各种条件
/*[#th:if=“${}”]*/
/*[/]*/
我为此打开了一个问题:thymeleaf版本?我想当时我使用的是3.0.9