JSP Spring eval - это parse int (почему бы не разобрать long) - PullRequest
0 голосов
/ 04 ноября 2019

В теге я использую spring: eval pass Id как $ {status.value}, и почему весна использует parseInt, а не parseLong? ps: $ {status.value} is submission.Id

jsp Tag

<spring:bind path="id">


    <c:if test="${status.value ne null}">
    <spring:eval var="submission" expression="@myService.findById(${status.value})"/>

Это моя сущность, я не уверен, что сущность повлияет на весну: eval или нет

@Entity
@Cacheable
@Audited
@DynamicInsert
@DynamicUpdate
@DisplayField("testNo")
@Table(name = "test_submission")
public class Submission extends TenantAuditableDynaObjectEntitySupport {

эта ошибка

org.springframework.web.servlet.tags.EvalTag.setExpression 

это то, что я путаю, почему spring: eval будет работать parseInt?

<spring:eval var="submission" expression="@myService.findById(${status.value})"/>
SEVERE: Servlet.service() for servlet [jsp] threw exception
java.lang.NumberFormatException: For input string: "320190829135875"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:583)
    at org.springframework.expression.spel.ast.Literal.getIntLiteral(Literal.java:76)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.maybeEatLiteral(InternalSpelExpressionParser.java:812)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatStartNode(InternalSpelExpressionParser.java:501)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatPrimaryExpression(InternalSpelExpressionParser.java:343)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatUnaryExpression(InternalSpelExpressionParser.java:337)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatUnaryExpression(InternalSpelExpressionParser.java:316)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatPowerIncDecExpression(InternalSpelExpressionParser.java:293)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatProductExpression(InternalSpelExpressionParser.java:272)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatSumExpression(InternalSpelExpressionParser.java:255)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatRelationalExpression(InternalSpelExpressionParser.java:210)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatLogicalAndExpression(InternalSpelExpressionParser.java:198)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatLogicalOrExpression(InternalSpelExpressionParser.java:186)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatExpression(InternalSpelExpressionParser.java:146)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.consumeArguments(InternalSpelExpressionParser.java:469)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.maybeEatMethodArgs(InternalSpelExpressionParser.java:443)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.maybeEatMethodOrProperty(InternalSpelExpressionParser.java:738)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatDottedNode(InternalSpelExpressionParser.java:397)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.maybeEatNode(InternalSpelExpressionParser.java:360)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatPrimaryExpression(InternalSpelExpressionParser.java:345)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatUnaryExpression(InternalSpelExpressionParser.java:337)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatPowerIncDecExpression(InternalSpelExpressionParser.java:293)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatProductExpression(InternalSpelExpressionParser.java:272)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatSumExpression(InternalSpelExpressionParser.java:255)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatRelationalExpression(InternalSpelExpressionParser.java:210)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatLogicalAndExpression(InternalSpelExpressionParser.java:198)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatLogicalOrExpression(InternalSpelExpressionParser.java:186)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatExpression(InternalSpelExpressionParser.java:146)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.doParseExpression(InternalSpelExpressionParser.java:127)
    at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:60)
    at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:32)
    at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpression(TemplateAwareExpressionParser.java:76)
    at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpression(TemplateAwareExpressionParser.java:62)
    at org.springframework.web.servlet.tags.EvalTag.setExpression(EvalTag.java:74)

это мой интерфейс

public interface EntityRepository<T extends Entity> extends JpaRepository<T, Long>, DynamicQueryEntityRepository<T> {

    @QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value = "true") })
    T findById(Long id);

это то, что расширяет мой интерфейс JpaRepository

package org.springframework.data.jpa.repository;

Я новичок весной, пожалуйста, скажите мне, где я скучаю по настройке или что-то еще, спасибо.

1 Ответ

0 голосов
/ 04 ноября 2019

Похоже, что ваше status.value является строкой. EL будет рассматривать встроенные числа как целые, если вы не ставите L в конце (как в исходном коде Java). Лучшее решение состоит в том, чтобы исправить ваш статусный объект для обработки значения как long;следующий лучший способ - это явно вставить вызов parseLong в ваше выражение.

Ответ @chrylis -on strike-

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...