5

SOや他の場所でこのトピックに関連する質問がいくつかありますが、この特定の質問に対する決定的な答えは見つかりませんでした。

p:dataTable行をクリックして詳細ページ(ダイアログやウィンドウではなく、新しいページ)を開く可能性があります。

私はこの方法でそれを解決しました(primefacesのWebサイトから入手しましたが、何らかの理由でもう存在しません:http: //web.archive.org/web/20101001223235/http ://www.primefaces.org/showcase/ ui / datatableRowSelectionInstant.jsf):

<p:dataTable var="order" value="#{orderBean.orders}" selection="#{orderBean.selectedOrder}" selectionMode="single" rowKey="#{order.number}">
  <p:ajax event="rowSelect" listener="#{orderBean.orderSelect}"/>
  <p:column ... />
</p:dataTable>

次に、ナビゲーションがBeanで実行されます。

public void orderSelect(SelectEvent event) {  
  ConfigurableNavigationHandler nh = (ConfigurableNavigationHandler)FacesContext.getCurrentInstance().getApplication().getNavigationHandler();
  nh.performNavigation("orderDetail?faces-redirect=true");
}

私の質問:バッキングBeanの助けを借りずにJSF内でこれを行う方法はありますか?

また、primefacesサイトからコードの例を削除したので質問しています。これは、これがそのようなことを行う正しい方法ではないことを示している可能性があります。

4

3 に答える 3

8

目的のセルを単純なでラップし<h:link>ます。

<p:column>
    <h:link outcome="orderDetail">
        ...
    </h:link>
</p:column>

リンクで必要に応じてCSSdisplay:blockを使用して、セル全体にまたがるようにします。必要に応じて、ネストされたを使用してリクエストパラメータを渡すことができます<f:param>

于 2013-03-26T12:07:56.057 に答える
1

これはajaxリクエストであるため、通常、リクエスト/レスポンスはWebページの一部のコンポーネントを再レンダリングするために使用されます。あなたにできることは

<p:ajax event="someventofintrest" onsuccess="javascript:myjsmethod();"></p:ajax>

and

<p:remotecommand name="myjsmethod" action="#{mybean.mybeanmethod}" />

and in the backing bean

public String mybeanmethod(){
  return "mynewpage";  // Navigate away to mynewpage.xhtml
}

HTH。

于 2013-03-26T09:08:03.887 に答える
1

私は本当に完璧な解決策を見つけられなかったので、これが私が今それをしている方法です。

私は今、このような「ナビゲーター」クラスを持っています

@Component
public class Navigator {
  public void nav(String page) {
    UIHelper.navigateTo(page);
  }
}

そして、私はこのクラスを私のajaxイベントから呼び出します。

<p:ajax event="rowSelect" listener="#{navigator.nav('orderDetail')}"/>

私が言ったように、本当に完璧ではありませんが、バッキングBeanにコードを書く必要がないという事実が好きです。(もちろん、ナビゲーターのコードを作成する必要がありますが、再利用できます。)

于 2013-03-26T14:50:57.777 に答える