tôi thấy một số mã như sau trong một JSPkiểm tra thuộc tính trong JSTL <c:if> thẻ
<c:if test="<%=request.isUserInRole(RoleEnum.USER.getCode())%>">
<li>user</li>
</c:if>
nhầm lẫn của tôi là qua "=" xuất hiện trong giá trị của thuộc tính test
. Sự hiểu biết của tôi là bất kỳ thứ gì được đưa vào trong phạm vi <%= %>
được in ra đầu ra, nhưng chắc chắn giá trị được gán cho thử nghiệm phải là Boolean, vậy tại sao công việc này lại hoạt động?
Đối với điểm thưởng, có cách nào để thay đổi giá trị thuộc tính ở trên sao cho nó không sử dụng mã tập lệnh không? Có lẽ, điều đó có nghĩa là sử dụng EL thay thế.
Chúc mừng, Don
<%= => được in với sản lượng chỉ khi nó xuất hiện bên ngoài của một thẻ JSP, như một câu trả lời dưới đây cho biết. Tuy nhiên, nó không * không * được đánh giá thành một chuỗi nhưng thay vì được chuyển đổi thành bất kỳ kiểu nào mà thuộc tính mong đợi. Thuộc tính 'test' của' 'thuộc loại' boolean', vì vậy bất kỳ biểu thức nào của tập lệnh trả về sẽ bị ép buộc thành 'boolean'. –
mksios
Mặc dù thật thú vị khi thấy rằng nếu bạn trộn chuỗi và tập lệnh trong một thuộc tính thẻ JSP, công cụ sẽ bị nhầm lẫn và diễn giải toàn bộ giá trị dưới dạng chuỗi. Nghĩa là, '' sẽ không thực thi tập lệnh nhưng thay vì ép buộc chuỗi 'abc <%= true %>' thành boolean qua 'Boolean.valueOf()' trả về 'false'. http://stackoverflow.com/questions/8168821/comparing-string-and-boolean-in-expression-language –
mksios