3

私はliferayとjsfを使用しています。私のポートレットでは、ページを送信した後、バッキングBeanに新しい値を設定してリセットしようとしました。空白のフィールドが表示されましたが、ページを更新すると、以前に送信した古い値が再度取得され、古い値で再度送信されます。

新しいviewrootを取得しようとしましたが、同じ結果が得られました。

public void reset(AjaxBehaviorEvent event){

    FacesContext context = FacesContext.getCurrentInstance();
    Application application = context.getApplication();
    ViewHandler viewHandler = application.getViewHandler();
    UIViewRoot viewRoot = viewHandler.createView(context, context
            .getViewRoot().getViewId());
    context.setViewRoot(viewRoot);
    context.renderResponse(); //Optional

    this.MyBean = new MyBean();
}

PS送信後、このメソッドをreset(null);として呼び出します。

4

4 に答える 4

1

ビューが破棄される前でもリセットしたいので、Beanのスコープはrequestでもviewscopeでもないようです。

ConversationScoped会話を開始したときに作成されるCDIで利用でき、を呼び出すことで会話を終了するようにマークできますconversation.end()

JSF 2 ConversationScopeはどのように機能しますか?

または、View Scope Beanをリセットする場合は、Ajaxイベントで以下を使用してリセットすることもできます。

Map<String, Object> viewMap = FacesContext.getCurrentInstance().
                              getViewRoot().getViewMap();
viewMap.put("MyBean",new MyBean());
于 2013-03-20T17:44:03.467 に答える
1

各リクエストの後にBeanをリセットする場合。その場合、関数を使用する代わりに、jsfによって提供されるスコープを使用できます。

requestスコープ内でのBeanの使用

Beanスコープに関するチュートリアル

于 2013-02-01T11:32:03.340 に答える
0

本当に簡単です。@RequestScopedとボタンで注釈を付けるだけです。

@ManagedBean
@RequestScoped
public class MyBean{

public void resetEvent(ActionEvent actionEv) {
    }

}
于 2013-03-26T11:38:49.120 に答える
0

更新の問題ではありませんが、以前に送信されたデータを送信するブラウザの問題です。私はかなり良い解決策をいくつか見つけました。

私はLiferayを使用しているので、

<action-url-redirect>true</action-url-redirect> 

このようなliferay-portlet.xmlで

<portlet>
<portlet-name>booksportlet</portlet-name>
<icon>/icon.png</icon>
<action-url-redirect>true</action-url-redirect>
<instanceable>false</instanceable>
</portlet>

だから私はこれを選びました。

于 2013-03-27T20:30:08.077 に答える