문제

JSP에서 다음과 같은 코드를 보았습니다.

<c:if test="<%=request.isUserInRole(RoleEnum.USER.getCode())%>">
    <li>user</li>
</c:if>

내 혼란은 값에 나타나는 "="에 있습니다. test 기인하다.내 이해는 여기에 포함된 모든 것이 <%= %> 출력에 인쇄되지만 테스트에 할당된 값은 부울이어야 하는데 이것이 작동하는 이유는 무엇입니까?

보너스 포인트의 경우 스크립틀릿 코드를 사용하지 않도록 위의 속성 값을 변경하는 방법이 있습니까?아마도 이는 대신 EL을 사용하는 것을 의미할 것입니다.

건배, 돈

도움이 되었습니까?

해결책

그 모든 것 test 속성은 무엇인가가 true인지 확인하기 위해 문자열 "true"(대소문자 구분 안 함)를 찾습니다.예를 들어, 다음 코드는 "Hello world!"를 인쇄합니다.

<c:if test="true">Hello world!</c:if>

내의 코드는 <%= %> 부울 값을 반환하므로 "true" 또는 "false"라는 문자열을 인쇄합니다. <c:if> 태그를 찾습니다.

다른 팁

다음과 같은 것을 사용할 수도 있습니다.

<c:if test="${ testObject.testPropert == "testValue" }">...</c:if>

<%= %> 사이의 표현식은 c:if 태그가 평가되기 전에 평가됩니다.따라서 | request.isuserinrole |를 가정합니다 returns | true |, 당신의 예제는 이것으로 평가됩니다.

<c:if test="true">
    <li>user</li>
</c:if>

그런 다음 c:if 태그가 실행됩니다.

일반적으로 JSP 태그 라이브러리의 속성은 정적이거나 요청 시 해결될 수 있습니다.요청 시 해결되면 JSP는 런타임 시 해당 값을 확인하고 출력을 태그에 전달합니다.이는 거의 모든 JSP 코드를 속성에 넣을 수 있으며 태그는 생성되는 출력에 따라 작동한다는 것을 의미합니다.

jstl taglib 문서를 보면 어떤 속성이 재사용 시간이고 어떤 속성이 아닌지 확인할 수 있습니다. http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html

<%=%> 자체는 출력으로 전송되며 JSTL의 컨텍스트에서는 문자열로 평가됩니다.

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