0

ConversationScope'd Bean のアクション メソッドが起動しない理由がわかりません。豆は次のとおりです。

package org.work;

import java.io.Serializable;
import javax.enterprise.context.ConversationScoped;
import javax.faces.event.ComponentSystemEvent;
import javax.inject.Named;

@Named
@ConversationScoped
public class NewClass implements Serializable {

    private static final long serialVersionUID = 6470665657635110586L;
    private boolean b1;

    public boolean isB1() {
        return b1;
    }

    public void setB1(boolean b1) {
        this.b1 = b1;
    }

    public void preRenderView(ComponentSystemEvent evt) {
    }

    public String peformAction() {
        return null;
    }
}

私のXHTMLは次のとおりです。

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <f:view>
        <h:head>

        </h:head>
        <f:metadata>
            <f:viewParam name="b1"
                         value="#{newClass.b1}" />
            <f:event type="preRenderView"
                     listener="#{newClass.preRenderView}"/>
        </f:metadata>
        <h:body>
            <h:form>
                <h:commandLink action="#{newClass.setB1(!newClass.b1)}"
                               style="background-color:  #{newClass.b1 ? 'darkorchid' : 'aquamarine'};"
                               value="btn3"/>
                <h:panelGrid rendered="#{newClass.b1}"
                             columns="1">
                    <h:commandLink value="edit"
                                   action="#{newClass.peformAction()}" />
                </h:panelGrid>
            </h:form>
        </h:body>
    </f:view>
</html>

ブール値を反転して他の commandLink をレンダリングするはずの commandLink を押した後、 performAction() メソッドが起動されません。デバッグ時にブール値が true に設定されていることがわかりますが、viewparams が設定される前に「rendered」属性が評価されるようです。これは本当ですか?この例は、@ManagedBean および @javax.faces.bean.ViewScoped で正常に動作します。

4

1 に答える 1

0

あなたは長続きする会話をしていないと思います。このサイトで詳細を読むことができます: http://docs.oracle.com/javaee/6/api/javax/enterprise/context/ConversationScoped.html

一時的な会話がある場合、この Bean はリクエストごとに再作成されます

于 2014-04-16T09:41:40.573 に答える