0

私の JSF アプリケーションに関連して、 Mojarra JSF 2.1.16ライブラリーに問題があることに気付きました。ViewScopedViewParam として取得したログインからユーザーをロードする Bean があります。その後、読み込んだユーザーデータを管理・保存することができます。以下はビューコードです。メインフォームフィールドをスキップしましたが、問題がないことをテストしました。

    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui"
template="/templates/general_template.xhtml">

<ui:define name="metadata">
    <f:metadata>
        <f:viewParam id="user" name="user"
            value="#{manager._ParamUser}" />
        <f:event type="preRenderView"
            listener="#{manager.initialize}" />
    </f:metadata>
</ui:define>

<ui:define name="general_content">
    <p:outputPanel autoUpdate="false" id="loggedData" name="loggedData"
        layout="block">
        <h:form id="SystemUserForm">

            <h:panelGrid columns="4" cellspacing="10px" style="border-color:red;">
                <h:outputText value="#{msg.LOGIN}:" />
                <h:outputText value="#{manager._UserBean._login}" />
            </h:panelGrid>
            <p:commandButton value="#{msg.UPDATE}" action="#{manager.actionSave}"
    ajax="false" />

            <p:commandButton value="#{msg.CANCEL}"
    action="#{manager.actionCancelSave}" ajax="false" />
        </h:form>
    </p:outputPanel>
</ui:define>

最初に Bean が作成され、受信したパラメーターを使用してユーザー自体がデータベースからロードされます。ViewScoped呼び出された Beanmanagerが再度構築されているため、アクション メソッドを呼び出して保存すると問題が発生します。したがって、paramはなく、ヌルポインター Exceptionがあります。Mojarra 2.1.14および2.1.15で正しく動作しています。

バッキング Bean コード:

@ManagedBean
@ViewScoped
public class Manager extends UserData {

public static final String PARAM_USER = "ParamUser";

private String _ParamUser;

public String get_ParamUser() {
    return this._ParamUser;
}

public void set_ParamUser(String _ParamUser) {
    this._ParamUser = _ParamUser;
}

public Manager() {
    super();
}

@Override
public void initialize(ComponentSystemEvent event) {
    if (!FacesContext.getCurrentInstance().isPostback()) {
        loadUserBean(this._ParamUser);
        if (this._UserBean == null) {
            redirectTo404();
        }
    }
}

@Override
public String actionSave() {
    super.actionSave();
    return NavigationResults.USER_LIST;
}

UserDataもちろん、抽象クラスです。がactionSave()呼び出されると、 bean が再度構築され、_ParamUser属性はありません。これは、viewParamによって取得されるためです。そのコンストラクターのリコールは、Mojarra 2.1.6 でのみ発生しています。

4

1 に答える 1

0

この問題は Mojarra JSF 2.1.17で解決され、試行およびテストされました。Mojarra JSF 2.1.16およびTomcat 6に問題がある可能性があります。ただし、そのバージョンの既知の問題は見つかりませんでした。

于 2013-01-22T08:07:24.647 に答える