문제

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 '&nbsp;'
   }
%>
<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 () '방법을 가질 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top