1

Bean は次のように単純に定義されます。

@Named
@RequestScoped
public class ConfirmBean {

    private String confirmMsg;

    public ConfirmBean(){
        confirmMsg = "Are you sure you want to delete this file ?";
    }   

   // getters & setters           
}

そして継承するクラスはClientBehaviorBase

@FacesBehavior(value = "confirm")
public class ConfirmDeleteBehavior extends ClientBehaviorBase {

    @Inject
    ConfirmBean confirmBean;
    //@Inject
    //ConfirmEJBBean confirmEJBBean;
    //@EJB
    //ConfirmEJBBean confirmEJBBean;

    @Override
    public String getScript(ClientBehaviorContext behaviorContext) {
        return "return confirm('"+confirmBean.getConfirmMsg()+"');";
    }
}

taglibファイルで-

    <namespace>http://www.custom.tags/jsf/delete</namespace>
    <tag>
        <tag-name>confirmDelete</tag-name>
        <behavior>
            <behavior-id>confirm</behavior-id>
        </behavior>
    </tag>

-のようなエントリcontext-paramweb.xml

<context-param>
    <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
    <param-value>/WEB-INF/taglib/delete.taglib.xml</param-value>
</context-param>

フロントレイヤーでこのカスタムタグにアクセスします-

        <h:form>
            <h:commandButton value="Delete" action="done">
                <b:confirmDelete/>
            </h:commandButton>
        </h:form>

内部で使用されているバージョンのGlassfishアプリケーション サーバー4.1.1を使用しています。Mojarra 2.2.12

私はNPEここを持っています-

ここに画像の説明を入力

4

1 に答える 1

2

クラスを拡張してもインジェクションの対象にならないということではなく、@FacesBehaviouris アノテーションによってインジェクションの対象にならないということです。少しグーグルでこれを教えてくれました:JSF 2.2ではインジェクションのターゲットではありませんが、2.3では.

OmniFacesは、jsf 2.2 で使用される FacesConverter および FacesValidator でのインジェクションのサポートを追加しましたが、FacesBehaviour では使用できませ

以下も参照してください。

于 2016-06-14T16:32:13.203 に答える