var
이 포함 된 EL 표현식 평가에 문제가 있습니다.JSF 표현식 태그 평가 표현
나는 사용자 정의 유효성 검사기를 사용하는 프로젝트가 있습니다.
<tag>
<name>my-validator</name>
<tag-class>my.packaga.MyValidatorTag</tag-class>
<body-content>JSP</body-content>
<description>This is my validator</description>
<attribute>
<name>fieldName</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>java.lang.String</type>
<description>This is some field I need</description>
</attribute>
</tag>
:
public class MyValidatorTag extends ValidatorTag
이 클래스는 태그의 적절한 tld
파일, 속성 fieldName
수 있습니다 :
public class MyValidator implements Validator, StateHolder
나는 그와 관련된 태그 클래스가 여태까지는 그런대로 잘됐다. 그러나이 설정은 속성 값에 JSF EL 표현식을 사용할 수 없습니다. 그래서 발리 클래스 (클래스에 태그를하지 않음) 나 속성 값을 평가하기 위해이 코드를 사용 :
public static String evaluateEl(String expression) {
String value = null;
if (expression == null) {
return "";
}
if ((expression.indexOf("#{") != -1)
&& (expression.indexOf("#{") < expression.indexOf('}'))) {
Object evaledValue =
FacesContext.getCurrentInstance().getApplication().createValueBinding(
expression).getValue(FacesContext.getCurrentInstance());
if (evaledValue != null) {
value = evaledValue.toString();
} else {
value = null;
}
} else {
value = expression;
}
return value;
}
그것은 문자열로 제한을하고, 대부분의 EL 식 작동합니다. 표현식 Hello #{1 eq 2}
을 사용하면 속성의 값이 Hello false
이됩니다. 그러나 작동하지 않는 경우가 있습니다. 다른 태그에 의해 생성 된 var
이 포함 된 표현식은 작동하지 않습니다. 데이터 테이블, 데이터 테스터 및 가장 중요한 것은 <f:loadBundle>
입니다. 검사기를 포함하는 입력 컴포넌트 얹는
<f:loadBundle basename="mypackage.message.ui-strings" var="msgs" />
:
<cust:my-validator fieldName="#{msgs['myfield1.name']}"></cust:my-validator>
필드 명을 위 식 계산 코드를 이용하여 빈 문자열을 평가한다. #{requestScope.msgs....
으로 변경해도 문제가 해결되지 않습니다. loadBundle 구현을 살펴보면 범위를 요청할 때 msgs
을 추가하므로 vars가 작동하지 않는 이유는 알 수 없습니다. 제발, 누군가 내가 이해하도록 도와 줘.
어떤 jsp 또는 ee 버전을 사용하고 있습니까? Jsp 2.1에는 이것을 단순화하는 통합 엘이 들어 있습니다. –
버전 1.2 유감스럽게 생각합니다. –