申し訳ありませんが、本当に本当に基本的な質問...
ページに表示する「掲示板スレッド」のリストがあります。それらのいずれかをクリックして、そのスレッドの詳細を表示するページにリダイレクトできるようにしたいと考えています。しばらくググっても苦労します...
(ちなみに私はPrimeFacesを使っています)
私の「リスト」ページからの関連コードは次のとおりです。
<p:commandLink value="#{thread.title}" action="#{messageboardBean.showThread()}">
<f:param name="threadId" value="#{thread.id}" />
</p:commandLink>
(h:form 要素にあります)
これは私の名前付き Bean の一部です (他の方法は正常に動作します)
...
@ManagedProperty(value="#{param.threadId}")
private Long threadId;
...
public String showThread() {
System.out.println("id is " + getThreadId());
return "messageboard/list";
}
...
ご覧のとおり、私のメソッドはまだ実装されていませんが、呼び出されていません。誰かが理由を教えてください。
ちなみに、同じ(または同様の)問題で h:link も試しました。
ありがとう!
更新 - 解決済み
以下のヘルプのおかげで、これが私の解決策です (「メッセージボード」を「ディスカッション」に名前を変更しました)。
リンクはこのコードを使用して生成されます
値: ページに何を表示するか、私の場合、ディスカッション結果のタイトル: edit.xhtml を参照し、アクセスしたい face ファイル ...[request] パラメータは「threadId」と呼ばれます私の「スレッド」オブジェクトにid属性の値があります。
edit.xhtml ページには、これがあります
<f:metadata>
<f:viewParam name="threadId" value="#{viewDiscussionBean.threadId}" />
<f:event type="preRenderView" listener="#{viewDiscussionBean.loadDiscussion}" />
</f:metadata>
「threadId」は最初のページのパラメーター名と同じであり、viewDiscussionBean の threadId プロパティにバインドされていることに注意してください。
次に、Bean にすべてのパラメーターを設定したら、viewDiscussionBean の loadDiscussion メソッドを呼び出します。これには threadId プロパティがあるため、これを行うことができます (以下を参照)。
私のviewDiscussionBeanには次の管理プロパティがあります(viewParamタグがこれを設定すると思いますが、その逆ではありません)。
@ManagedProperty(value="#{param.threadId}")
private Long threadId;
private Discussion thread;
したがって、設定が完了すると、このメソッドを実行できます (ID があるため)。
public String loadDiscussion() {
thread = mbDao.find(threadId);
return "edit";
}
これは、DAO (Hibernate を使用) を使用してその ID を持つディスカッション スレッドを検索し、それを Bean に設定するだけです。その後...
私の edit.xhtml ページでは、次のようなものを使用してディスカッション スレッドの値にアクセスできます。
<h:outputText value="#{viewDiscussionBean.thread.message}" />
出来上がり!ありがとう。