1

次の最小限のテストケースがあります。

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 を使用しています。

4

3 に答える 3

-1

変数テストを宣言してみてください。以下を参照してください....(通常、マネージドBeanクラスにはゲッターとセッターがあります)

@ManagedBean(name="userBean")
@SessionScoped
public class UserBean{
  public String test = "hello!";

  public String getTest() {
    return test; 
  }
}
于 2016-05-24T14:01:25.743 に答える
-1

メソッドを値として表示するには、メソッド名の末尾に括弧を指定する必要があります。use <h:outputText value="#{userBean.test()}"/>. Jsp はそれをメソッドとして認識し、値を表示します

于 2013-08-07T13:19:04.477 に答える