次の最小限のテストケースがあります。
not_working.jsp:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
<t:not_working_tag>
Hello
</t:not_working_tag>
WEB-INF/tags/not_working_tag.tag
<%@tag description="Main page template" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<html>
<head></head>
<f:view>
<h:outputText value="#{userBean.test}"/>
<jsp:doBody/>
</f:view>
</html>
src/java/UserBean.java
@ManagedBean(name="userBean")
@SessionScoped
public class UserBean
{
public String getTest() { return "hello!"; }
}
ここで、ブラウザーから not_working.jsp にアクセスすると、"hello!" が表示されると思います。私が見ているのは「#{userBean.test}」です。つまり、value 属性に入れたリテラル EL 式です。ここで、"${userBean.test}" を のすぐ上に置くと、それが機能します - "hello!" が表示されます。この単純なテスト ケースでは、これで十分ですが、もちろん、より複雑な状況 (f:selectItems など) で Bean の値を使用したいです。
これらすべてから私が理解しているのは、遅延式の EL が何らかの理由で評価されていないということです。私は何を間違っていますか?タグ・ファイルから、JSF タグの値属性で必要な遅延式を使用するにはどうすればよいですか?
私は JSF 2.2 (Mojarra 2.2.0) と Tomcat を使用しています。