2012-02-14 5 views
1

하나의 매개 변수를 취할 수있는 사용자 정의 태그를 정의한 다음 숫자를 사용하여 정보를 찾아 반환합니다. 하지만 계속 NumberFormatException이 발생합니다. EL을 사용하여 jsp에서 태그에 번호를 전달하고 있습니다.NumberFormatException을 제공하는 사용자 정의 태그에 값 전달

내 사용자 정의 태그 핸들러에서
private int id; 
private void setId(int id){ 
this.id = id; 
} 
private int getId(){ 
return id; 
} 

: 내 TLD에서

private int id; 
//getters and setters for id 
public int doStartTag() throws JSPException { 
//Does some stuff with id 
} 

(생략 물건) :

<attribute> 
    <name>id</name> 
    <required>true</required> 
    <rtexprvalue>true</rtexprvalue> 
</attribute> 

행동 빈 클래스에서

<my:myTag id="${action.id}"/> 

태그는 마비를 그냥 지나치면 내가 원하는대로 행동합니다. er in (ie, id = "6")하지만 EL 표현식 값을 사용할 때 항상 예외를 던집니다. 표현식을 평가할 때 어딘가에서 int-string 변환이 발생합니까? 그것은 콩의 int 필드이며, 나는 그것을 그대로 통과 할 것이라고 생각 했습니까? 내 태그 처리기의 특성을 String 및 Integer로 변경하려고 시도했지만 어느 것도이를 해결하지 못했습니다. rtexprvalue를 true로 설정하여 정상적으로 평가해야합니다. 어떤 도움을 주셔서 감사합니다.

+0

정확하게 널 포인터 예외가 발생합니까? –

+2

어떤 JSP 엔진과 버전이 있습니까? 이전 버전의 JSP 스펙에는 JSP 컴파일러 단계에서 EL 구문 분석/평가가 포함되지 않았으므로 태그가 수동으로 표현식을 평가해야했습니다. – Tim

+0

@Tim Thanks. 이것은 올바른 방향으로 나를 가리켰으며 실제로 태그 처리기에서 수식을 수동으로 평가해야한다는 것이 었습니다. 이 질문에 답을하고 싶다면 받아 들일 것입니다. – Paul

답변

2

OK,이 JSP 1.x에서에서

는 JSP 엔진은 표현 언어에 대해 아무것도 몰랐 ... 위 내 댓글의 긴 버전입니다. EL은 JSTL의 일부로 정의되었지만 태그 자체에 내장되어 엔진은 평가에 관여하지 않았습니다.

JSP 2.0에서는 EL이 JSP 사양으로 옮겨졌으며 엔진이이를 지원합니다. JSP 2.1에서 EL은 JSF EL과 병합되었습니다.

그래서 JSP 1.x를 사용하는 경우 EL을 직접 사용해야합니다.

그러나 JSP 2.0에서는 일을 더욱 복잡하게하기 위해 고객 태그 처리기 용 API가 단순화되었습니다. JSP 1.x에서 태그는 Tag으로 구현되었지만 JSP 2.0 태그에서는 SimpleTag을 구현합니다.

JSP 2.x 엔진은 JSP 1.x 스타일 태그 (Tag을 구현하는 클래스)를 지원하지만 JSP 1.x에서 처리 한 것과 같은 방식으로 처리됩니다. EL은 엔진에 의해 평가되지 않고 태그를 명시 적으로 평가해야합니다.

rtexprvalue의 경우 실제로 EL 스크립트가 지원되는지 여부를 제어하며 EL 표현식이 지원되는지 여부는 EL에서 사전 지정됩니다.

관련 문제