0

In a tag i using spring:eval pass Id as ${status.value}, and why spring use parseInt not 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})"/>

This is my entity, I am not sure entity will affect spring:eval or not

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

this error

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

this is what I confuse why spring:eval will going 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)

this is my interface

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

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

this is what my interface extends JpaRepository

package org.springframework.data.jpa.repository;

I am newbie in spring please tell me where i miss to setup or something, thanks.

Tse Victor
  • 11
  • 3
  • Do you understand the difference between `serialVersionUID` and `@Id`? – chrylis -cautiouslyoptimistic- Nov 04 '19 at 04:03
  • Hi, after i read this https://stackoverflow.com/questions/14274480/static-final-long-serialversionuid-1l I understand thanks for it, but why in tag spring:eval will parseInt not Long or something that is springframework configuration problem or I missunderstanding spring? – Tse Victor Nov 04 '19 at 05:50
  • You didn't show the interface for `findById`, in particular what type it expects. – chrylis -cautiouslyoptimistic- Nov 04 '19 at 05:52
  • @chrylis-onstrike- hi I edited the code and put interface, but before run interface finById my error will throw it – Tse Victor Nov 04 '19 at 06:00
  • It appears that your `status.value` is a string. EL will treat inline numbers as ints unless you put `L` on the end (as in Java source code). The best solution is to fix your `status` object to treat `value` as a `long`; the next best is probably to explicitly insert a `parseLong` call in your expression. – chrylis -cautiouslyoptimistic- Nov 04 '19 at 06:48
  • 1
    @chrylis-onstrike- wow, When i put L onther end findById(${status.value}L) it is works ! , thank you very much. I will try another 2 best solution as your suggest thank you! have a nice day ~~ – Tse Victor Nov 04 '19 at 07:26

1 Answers1

0

It appears that your status.value is a string. EL will treat inline numbers as ints unless you put L on the end (as in Java source code). The best solution is to fix your status object to treat value as a long; the next best is probably to explicitly insert a parseLong call in your expression.

Answer by @chrylis -on strike-

Tse Victor
  • 11
  • 3