2012-03-15 5 views
1

を保存しません。 initメソッドは、私は、リクエストパラメータを取得し、必要なオブジェクトを塗りつぶす:viewscoped Beanが、私は、製品の選択アクションで私は、パラメータを渡して、製品情報ページにリダイレクト、そこから製品情報とデータテーブルとのページを持っているセッションパラメータ

私productInfo.xhtmlで
@ManagedBean 
@ViewScoped 
public class ProductInfo implements Serializable { 

private Product p; 
private Integer prId; 

@PostConstruct 
private void init() { 
    HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
    if (request.getParameter("prId") != null) { 
     prId = Integer.parseInt(request.getParameter("prId")); 
     p = pf.find(prId); 

私は、製品情報の表示や製品情報を編集するためのダイアログを持っていますが、私は私のリクエストパラメータがnullの提出を押したとき:

<p:commandButton styleClass="button-edit" value="Submit" actionListener="#{productInfo.saveProduct()}" update="prodInfo" oncomplete="dlg.hide();"/> 

私はprimefaces要素でjsf 2.0を使用しています。

誰でも手伝ってもらえますか?ありがとうございました。

答えて

1

これはセッションパラメータではありません。それは要求パラメータです。 nullというのは、送信依頼とともに送信していないからです。 <f:param>で送信してください。具体的な問題へ

<p:commandButton ...> 
    <f:param name="prId" value="#{productInfo.prId}" /> 
</p:commandButton> 

無関係、他のいくつかの潜在的な問題があります。まず、ビュースコープBeanはではありません。は、フォームを送信するときに再作成する必要があります。おそらく、ビュー内でタグハンドラを使用しています。第二に、生のjavax.servlet APIをJSFのカバーの下からできるだけ避けてください。代わりにExternalContext#getRequestParameterMap()を使用してください。第三に、<f:viewParam>はそのポストコンストラクションよりもはるかにクリーンです。第4に、ナビゲーションハンドラによるリダイレクトは、ビュー内のデザイン問題のような匂いがする。なぜGETリンクを使用しないのですか?

これらの問題の詳細については、Communication in JSF 2.0でご確認ください。

+0

ありがとうございました。そうですが、パラメータでもオブジェクトが再作成され、変更を保存できませんでした。私は別のアプローチを使用し、私のbeanのセッションをコピーし、リストページでプロダクトインフォページにリダイレクトする前にセッションオブジェクトFacesContext.getCurrentInstance()。getExternalContext()。getSessionMap()。remove( "productInfo"); ...他のsugestionsについては動作させるための唯一の方法...なぜ私のビュースコープのBeanはajaxリクエストで再構築されるのか分かりません...そして私はpostconstructを使って、ビュー – Questionmark

+1

「無関係」メモを読んでください。ビューのスコープ付きBeanは再作成しないでください。これは ''です。詳細な解説/解決策/例は、リンクの後ろにあります。セッションスコープの使用は解決策ではなく、ハック/回避策です。 – BalusC

+0

私は記事全体を読んで、コードの一部を改善するのに役立ちました。私はp:datatableとp:ajaxリクエストをselectリダイレクトで使用しています。これがリダイレクトできる唯一の方法です。リダイレクトした後、私のproductListビュースコープBeanが再構築された後は理解できません。少し遅いです。また、私はテンプレートを使用する必要があるので、テンプレートをxhtmlsに含めるためにを使用し、コンテンツ部分にはを使用しています。これは私が本当に望んでいる最初のJSFアプリケーションです。ご助力ありがとうございます。 – Questionmark

関連する問題