0

次の複合コンポーネント TestCC.xhtml があります。

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:cc="http://java.sun.com/jsf/composite">
<cc:interface>
<cc:attribute name="manager" method-signature="java.lang.String helloTest()" required="true"/>
</cc:interface>
<cc:implementation>
Hello #{cc.attrs.manager} !!!!!!!!!!!!!!!!!!!!!
</cc:implementation>
</html>

JSFF ファイルで呼び出そうとすると:

....
<icc:TestCC manager="#{viewScope.PatientClinicalBean.helloTest}"/>
...

複合タグでページがクラッシュし、コンソールに次のメッセージが表示されます。

javax.el.ELException: //C:/Documents and Settings/tlam/Application Data/JDeveloper/system11.1.2.3.39.62.76.1/o.j2ee/drs/iCHIP/ViewControllerWebApp.war/WEB-INF/classes/META-INF/resources/IchipComponent/TestCC.xhtml: javax.el.PropertyNotFoundException: //C:/Documents and Settings/tlam/Application Data/JDeveloper/system11.1.2.3.39.62.76.1/o.j2ee/drs/iCHIP/ViewControllerWebApp.war/Patient/Profile/Clinical.jsff @13,86 manager="#{viewScope.PatientClinicalBean.helloTest}": The class 'patient.profile.PatientClinicalBean' does not have the property 'helloTest'.

しかし、マネージド Bean には public String helloTest() メソッドと、JSFF ページの他の場所で正常に動作する他のメソッドがあります。

public class PatientClinicalBean{
String test = "TESTING"; 
...
public String helloTest() {
  return test;
}
...
}

私はこれをさまざまな方法で何度も試しましたが、すべて同じ結果でした。しかし、複合コンポーネントが文字列のみを出力し、文字列テスト フィールドに直接アクセスする式を入力すると、適切に実行されます。同じ JSFF ページで他のメソッド呼び出しが正常に機能している場合、複合コンポーネントのみから PatientClinicalBean のメソッドを参照できないようです。私がウェブで見た他のすべての例では、これと同じ方法でこれを行うのに問題はありません。何か不足していますか?!

4

1 に答える 1

0

jsf2 でメソッドを呼び出す場合は、次のように括弧を追加する必要があります。

....
<icc:TestCC manager="#{viewScope.PatientClinicalBean.helloTest()}"/>
...

それ以外の場合、jsf はそれをフィールドとして解釈し、メソッド getHelloTest() を見つけようとします。

于 2016-08-11T18:51:36.510 に答える