当前位置: 首页 > 知识库问答 >
问题:

Thymeleaf在将JavaScript文字传递给th: onClick时找不到我的变量

宿镜
2023-03-14

我正在尝试在我的Thymeleaf模板上使用JavaScript函数,该模板使用Thymeleaf变量,如下所示:

 <div th:object="${orderBy}">
        <form method="get" th:action="@{/}">
            <fieldset id="ordenacao">
                <legend>Ordenar</legend>
                <select th:name="orderBy">
                    <option th:each="orderBy : ${T(br.com.teste.segware.util.OrderTypes).values()}"
                    th:value="${orderBy}" th:text="${orderBy.displayValue}" ></option>
                </select> <br/> <br/>
                <input id="orderButton" th:onclick="'javascript:enableBtn(\'' + ${orderBy.displayValue} + '\');'"
                type="submit" value="Ordenar">
            </fieldset>
        </form>
    </div> 

变量是此枚举中的一个选项(使用Lombok生成getter):

@Getter
public enum OrderTypes {
    SELECIONE("Selecione..."),
    RECENTES("Recentes Primeiro"),
    ANTIGAS("Antigas Primeiro"),
    MAISUP("Mais Upvotes"),
    MENOSUP("Menos Upvotes");

    private final String displayValue;

    private OrderTypes(String displayValue) {
        this.displayValue = displayValue;
    }

}

带有th的菜单中的选项:每个选项都以下拉选择/选项菜单的形式正确显示在渲染的HTML中。

但是,当我使用作为te方法的JavaScript参数呈现的同一个变量时,我得到了以下错误:

原因:org.thymeleaf.standard.expression.TemplateProcessingException:异常评估SpringEL表达式:“orderBxpression.executeValue”(模板:“index”-第43行,第36行)在xpression.java:112SPELVariableExpressionEorg.thymeleaf.standard.expression.(SPELVariableExpressionExpression.execute)在xpression.java:89VariableEorg.thymeleaf.standard.expression.VariableExpression(VariableExpression.execute)在org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:66)在xpression.java:112Eorg.thymeleaf.standard.expression.(Expression.java:109)在org.thymeleaf.standard.expression.AdditionExpression.execute加法(AdditionExpression.java:96)在org.thymeleaf.standard.expression.ComplexExpression.executeComplex(ComplexExpression.java:62)在org.thymeleaf.exceptions.Ey.display(Eorg.thymeleaf.spring5.expression.)在valuator.evaluateAdditionEvaluator.java:290加法(AdditionEorg.thymeleaf.standard.expression.)在xpression.executeComplexExpression.java:166Complex(Eorg.thymeleaf.standard.expression.)在xpression.executeExpress.执行(Expression. java: 138)在org. thymeleaf. Process。InlinedOutputExpressionMarkupHandler. handleStandard aloneElementEnd(InlinedOutputExpressionMarkupHandler. java: 104)在org. attoparser。HtmlVoidElement. handleOpenElementEnd(HtmlVoidElement. java: 92)在org. attoparser。HtmlMarkupHandler. handleOpenElementEnd(HtmlMarkupHandler. java: 297)在org. attoparser。MarkupEventProcessorHandler. handleOpenElementEnd(MarkupEventProcessorHandler. java: 402)在org. attoparser。ParsingElementMarkupUtil. parseOpenElement(ParsingElementMarkupUtil. java: 159)在org. attoparser。MarkupParser. parseDocument(MarkupParser. java: 301)...50更多原因

这是JS函数(非常简单):

function enableBtn(select)
{
    if(select == 'SELECIONE' || select == 'Selecione...') 
    {
        document.getElementById('orderButton').disabled = true;
    };
}

那么,如果相同的参数在视图中正确呈现,为什么在th:onclick中会说找不到来自对象的变量?

以下是我迄今为止尝试过的:

th:onclick="'javascript:enableBtn(\'' + ${orderBy.displayValue} + '\');'"


th:onclick="|enableBtn('${orderBy.displayValue}');|"


th:data-enable='|{${orderBy.displayValue}}|' th:onclick="'enableBtn('enable')';'"

拜托这玩意儿怎么用?先谢谢你

共有1个答案

邓嘉致
2023-03-14

Basic JS,用于在选择更改时禁用/启用按钮。

 function enableBtn(select){
    var btn = document.getElementById('orderButton');
    if(select == 'SELECIONE' ){
        btn.disabled = true;
    } else {
        btn.disabled = false;
    }
 }

禁用页面加载按钮。当选择更改时,选中以启用按钮

<select th:name="orderBy" th:onChange="enableBtn(this.value)">
   <option th:each="orderBy : ${T( com.example.demo.OrderTypes).values()}"
           th:value="${orderBy}" th:text="${orderBy.displayValue}" ></option>
</select> <br/> <br/>
<input id="orderButton" type="submit" value="Ordenar" disabled>
 类似资料:
  • 问题内容: 我有一个PHP会话变量,在整个会话过程中仍然有效。在开头部分,我包含了我的JavaScript文件。 如果需要以下内容,如何将会话变量传递到JavaScript文件中。 由于无法在JavaScript文件中识别出,因此上面的代码不起作用。因此,我必须放入PHP文件本身,但是如何将其保留在JavaScript文件中? 问题答案: 在您的PHP文件中,您可以将用户设置为全局变量: 在包含外

  • 我有一个html文件thymeleaf,它有一个从控制器传递过来的变量,我需要将该变量传递给外部javascript文件上的函数。我该怎么做? 我可以得到这样的变量 我需要把这个id传递给里面的函数 那里有一个函数:

  • 问题内容: 我对此完全迷失了;我正在使用NodeJS来获取JSON,我需要将变量传递给我的页面并让JavaScript使用数据。 那就是我的Express代码(出于测试目的非常简单);现在使用EJS,我想收集这些我知道要呈现在页面上的数据, 但是我需要能够在JavaScript中收集这些数据(如果可能在.js文件中),但现在只是在我尝试过的“警告”框中显示变量 在翡翠中就像或。我可以在EJS中做类

  • 问题内容: 我有一个用JS计算的值,希望将其作为输入表单的一部分传递给PHP脚本。我如何将JS值的JS值作为POST参数获取? 基本上,在提交时,我需要将var通过post传递到下一个脚本。 想到的第一个想法是创建一个不可见的输入表单,该表单中包含值并与该表单一起输入,这可能吗? 问题答案: 是的,您可以在JavaScript代码中使用和设置该隐藏字段的值,以便将其与其他表单数据一起发布。

  • 问题内容: 我有一个端点,该端点在url中带有一个值,并产生一些将插入div的内容。我想使用JavaScript变量来构建url 。但是,是作为字符串而不是的值传递的。如何将JavaScript变量的值传递给? 问题答案: 您无法在Jinja中评估JavaScript。您正在尝试在Jinja呈现时在服务器端生成url,但您引用的变量仅在客户端浏览器上运行的JavaScript中可用。 在客户端上构

  • 本文向大家介绍如何将JavaScript变量传递给PHP?,包括了如何将JavaScript变量传递给PHP?的使用技巧和注意事项,需要的朋友参考一下 您可以在PHP的同一页面上轻松获取JavaScript变量值。尝试以下代码L。