존재하지 않는 속성에 대한 JSP Bean 태그
문제
JSP에서는 태그 $ {object.property}를 사용하여 Bean의 속성을 참조 할 수 있습니다.
존재하지 않을 수있는 속성을 다루는 방법이 있습니까? 다른 유형을 처리 해야하는 JSP 페이지가 있습니다. 예시:
public class Person {
public String getName()
}
public class Employee extends Person {
public float getSalary()
}
JSP에서는 이름과 월급의 열이있는 사람들의 테이블을 표시하고 싶습니다. 그 사람이 직원이 아닌 경우 급여는 비어 있어야합니다. 행 HTML은 다음과 같습니다.
<tr>
<td><c:out value="${person.name}"></td>
<td><c:out value="${person.salary}"></td>
</tr>
불행히도 사람이 직원이 아닌 경우 급여를 찾을 수없고 오류가 발생합니다. JSP에서 이것을 어떻게 해결합니까?
편집 : 대신에 JSP 태그 언어를 확인 하시겠습니까?
해결책
엘 빈 연산자가 범위를 가진 속성이라면 사용하십시오. 불행히도 직원을 사용하여 표현을 둘러싸고 있어야합니다.u003Cc:catch> :
<c:catch var="err">
<c:out value="${employee.salary}"/>
</c:catch>
정말로 필요한 경우 대신에, 당신은 사용자 정의 태그를 고려할 수 있습니다.
다른 팁
수업을 원한다면 사용하십시오 ${person.class}
. 당신은 또한 사용할 수 있습니다 ${person.class.name eq 'my.package.PersonClass'}
C : Out에서 "기본값"을 사용할 수도 있습니다.
<c:out value='${person.salary}' default="Null Value" />
간결하지만 확인되지 않았습니다.
<tr>
<td>${person.name}</td>
<td>${person.class.simpleName == 'Employee' ? person.salary : ''}</td>
</tr>
JSP 태그 언어를 확인하는 인스턴스가 있습니까?
이 글의 순간이 아닙니다. 나는 그들이 예약 한 곳을 읽었습니다. 대신에 EL의 키워드는 미래를위한 것일 수 있습니다. 또한이 특정 태그가있는 라이브러리가 있습니다. 직접 사용자 정의 태그를 만들기로 결정하기 전에 확인하십시오. 여기 링크가 있습니다, 대표적인 태그 라이브러리.
한 가지 방법은 사용자 정의 태그 라이브러리를 만들고 그 안에 다형성을 사용하여 사건을 처리하는 것입니다. Person
IS-A Employee
.
JSP의 경우 한동안이 작업을 수행하지 않았지만 GSP (Groovy/Grails 서버 페이지)에서 유사한 기술을 자주 사용합니다.
그렇지 않으면, 당신은 몇 가지 논리를 넣을 수 있습니다 JSP
(이상적이지 않음) 테스트 Employee
-네스 호:
<%
String salary
if (person instanceof Employee) {
salary = person.salary
} else {
salary = "" // or ' '
}
%>
<td><c:out value="${salary}"></td>
항상 유형 필드를 가질 수 있습니다.
public class Person {
public String getType() { return "Person"; }
public String getName()
}
public class Employee extends Person {
public String getType() { return "Employee"; }
public float getSalary()
}
당신의 JSP는 모양이 될 것입니다
<tr>
<td><c:out value="${person.name}"></td>
<td><c:if test="'Employee' eq person.type"><c:out value="${person.salary}"></c:if></td>
</tr>
물론 수업 수업에는 이미 ...
<tr>
<td><c:out value="${person.name}"></td>
<td><c:if test="'Employee' eq person.class.simpleName"><c:out value="${person.salary}"></c:if></td>
</tr>
`isemployee () '방법을 가질 수도 있습니다.