Thymeleaf не может найти мою переменную при передаче литерала JavaScript в th:onclick

Я пытаюсь использовать функцию JavaScript в моем шаблоне Thymeleaf, который использует переменную 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> 

Переменная является опцией из этого Enum (который использует Lombok для создания геттера):

@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:each правильно отображаются в отображаемом HTML в виде раскрывающегося меню выбора/параметров.

Но когда я использую ту же переменную, которая отображается как параметр JavaScript для метода, я получаю следующую ошибку:

Это функция JS (очень простая):

Итак, если ТАКОЙ ЖЕ параметр отображается правильно в представлении, то почему в th:onclick пишет, что не удалось найти переменную из объекта?

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

Вот что я пробовал до сих пор:

Пожалуйста, как, черт возьми, эта штука работает? заранее спасибо

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


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


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

Базовый JS для отключения/включения кнопки при изменении выбора.


person gbossa    schedule 04.12.2020    source источник
comment
Привет, спасибо за ответ! Да, точно! Если в раскрывающемся меню находится параметр ВЫБОР ПО УМОЛЧАНИЮ, кнопка должна быть отключена.   -  person Dirk Deyne    schedule 04.12.2020
comment
Я ответил на вопрос, это то, что вы искали?   -  person gbossa    schedule 04.12.2020
comment
Да! Это сделало трюк! Спасибо, мужик! Если вы можете и хотите, пожалуйста, проголосуйте за мой вопрос. Еще раз спасибо.   -  person Dirk Deyne    schedule 04.12.2020
comment
Вызвано: org.thymeleaf.exceptions.TemplateProcessingException: Исключение при оценке выражения SpringEL: orderBy.displayValue (шаблон: индекс — строка 43, столбец 36) в org.thymeleaf.spring5.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:290) в org.thymeleaf.standard.expression.VariableExpression.executeVariableExpression(VariableExpression.java:166) в org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:66) в org.thymeleaf.standard.expression.Expression.execute( Expression.java:109) в org.thymeleaf.standard.expression.AdditionExpression.executeAddition(AdditionExpression.java:96) в org.thymeleaf.standard.expression.ComplexExpression.executeComplex(ComplexExpression.java:62) в org.thymeleaf.standard .expression.Expression.execute(Expression.java:112) в org.thymeleaf.standard.expression.AdditionExpression.executeAddition(AdditionExpression.java:89) в org.thymeleaf.standard.expression.ComplexExpression.execut eComplex(ComplexExpression.java:62) в org.thymeleaf.standard.expression.Expression.execute(Expression.java:112) в org.thymeleaf.standard.expression.Expression.execute(Expression.java:138) в org.thymeleaf .standard.processor.StandardDOMEventAttributeTagProcessor.doProcess(StandardDOMEventAttributeTagProcessor.java:214) в org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74) в org.thymeleaf.processor.element.AbstractElementTagProcessor :95) в org.thymeleaf.util.ProcessorConfigurationUtils$ElementTagProcessorWrapper.process(ProcessorConfigurationUtils.java:633) в org.thymeleaf.engine.ProcessorTemplateHandler.handleStandaloneElement(ProcessorTemplateHandler.java:918) в org.thymeleaf.engine.TemplateHandleHandlerAdapterhandle TemplateHandlerAdapterMarkupHandler.java:260) в org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler$InlineMarkupAdap terPreProcessorHandler.handleStandaloneElementEnd (InlinedOutputExpressionMarkupHandler.java:256) при org.thymeleaf.standard.inline.OutputExpressionInlinePreProcessorHandler.handleStandaloneElementEnd (OutputExpressionInlinePreProcessorHandler.java:169) при org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler.handleStandaloneElementEnd (InlinedOutputExpressionMarkupHandler.java:104) в орг .attoparser.HtmlVoidElement.handleOpenElementEnd(HtmlVoidElement.java:92) в org.attoparser. HtmlMarkupHandle.handleOpenElementEnd(HtmlMarkupHandler.java:297) at org.attoparser.MarkupEventProcessorHandler.handleOpenElementEnd(MarkupEventProcessorHandler.java:402) at org.attoparser.ParsingElementMarkupUtil.parseOpenElement(ParsingElementMarkupUtil.java:159) at org.attoparser. .java:710) в org.attoparser.MarkupParser.parseDocument(MarkupParser.java:301) ... еще 50 Вызвано: org.springframework.expression.spel.SpelEvaluationException: EL1008E: Невозможно найти свойство или поле displayValue в объект типа 'br.com.teste.segware.util.OrderTypes[]' - возможно, не является общедоступным или недопустимым? в org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:217) в org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:104) в org.springframework.expression.spel .ast.PropertyOrFieldReference.access$000(PropertyOrFieldReference.java:51) в org.springframework.expression.spel.ast.PropertyOrFieldReference$AccessorLValue.getValue(PropertyOrFieldReference.java:406) в org.springframework.expression.spel.ast.CompoundExpression. getValueInternal(CompoundExpression.java:92) в org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:112) в org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:337) в org.thymeleaf.spring5.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:263)   -  person gbossa    schedule 04.12.2020


Ответы (1)


Отключите кнопку загрузки страницы. Когда выбор изменится, установите флажок, чтобы включить кнопку

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

Правильно ли я предполагаю, что вы хотите отключить кнопку Ordenar, когда ничего не выбрано (=SELECIONE)

<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>
person Dirk Deyne    schedule 04.12.2020