いくつかのパラメーターを取得しようとしています (現在は 2 つですが、他の xhtml ではおそらくもっと必要になるでしょう)。
index.html ページには、パラメーター user_id と section_id を持つ Threads.xhtml ページへのリンクがあります。
<h:dataTable value="#{Sections.sections}" var="Section">
<h:column>
<h:form>
<h:link value="#{Section.section_label}" outcome="Threads">
<f:param name="user_id" value="#{LoginIn.user_id}"/>
<f:param name="section_id" value="#{Section.section_id}"/>
</h:link>
</h:form>
</h:column>
</h:dataTable>
リンクをクリックすると、次のようになります。
Project/faces/Threads.xhtml?user_id=5§ion_id=2
だからそれは良いです:)。
ここで、ページ Threads.xhtml に、パラメーター user_id および section_id を使用して、ページ NewThread.xhtml へのリンク (index.xhtml のように dataTable ではなく 1 つのリンク - 新しいセクションを作成する) があります。
<h:form>
<h:link value="#{msg.create_new_thread}" outcome="NewThread">
<f:param name="user_id" value="#{param.user_id}"/>
<f:param name="section_id" value="#{param.section_id}"/>
</h:link>
</h:form>
リンクをクリックすると、たとえば次のようになります。
Project/faces/NewThread.xhtml?user_id=5§ion_id=2
だからそれもいいです:)。
ここで、次のようにして、user_id と section_id の NewThread.xhtml ページの値を確認します。
<h:outputText value="User_id: #{param.user_id}"/><br/>
<h:outputText value="Section_id: #{param.section_id}"/><br/>
そして、ページの値に次のように表示されます。
User_id: 5
Section_id: 2
じゃあ良いよ :)。しかし今、Java コード NewThread.java でこれらの値を取得しようとすると、null のみが返されます。
FacesContext facesContext = FacesContext.getCurrentInstance();
String user_id = (String) facesContext.getExternalContext().getRequestParameterMap().get("user_id");
String section_id= (String) facesContext.getExternalContext().getRequestParameterMap().get("section_id");
//For test:
System.out.println("User_id: " + user_id);
System.out.println("Section_id: " + section_id);
そしてコンソールで私は持っています:
User_id: null
Section_id: null
toString() メソッドも試しましたが、役に立ちませんでした。
セクションの 1 つへのリンクをクリックすると、index.xhtml に戻ります。2 番目のセクション (任意のユーザーによるもの、例: user_id=5)、Threads.xhtml に移動します。
Project/faces/Threads.xhtml?user_id=5§ion_id=2
Threads.xhtml には、2 番目のセクションのスレッドのリストがあります (ただし、xhtml コードのこの部分は関係ありません)。
<h:dataTable value="#{Threads.threads}" var="Thread">
<h:column>
<h:link value="#{Thread.thread_label}" outcome="Threads">
<f:param name="thread_id" value="#{Thread.thread_id}"/>
</h:link>
</h:column>
</h:dataTable>
そして、Threads.java の Java コードについては、次のようになります。
FacesContext facesContext = FacesContext.getCurrentInstance();
String section_id = (String) facesContext.getExternalContext().getRequestParameterMap().get("section_id");
System.out.println("Section_id: " + section_id);
そしてコンソールで私は持っています:
Section_id: 2
それで何?一度は機能しますが、別の場合は機能しません。
編集:
忘れてごめんなさい。NewThread.xhtml の commandButton を使用して、NewThread.java にアクセスします。
<h:commandButton value="#{msg.add_thread}" action="#{NewThread.AddThread}"/>
NewThread.java の AddThread メソッドを呼び出します。AddThread メソッドの (try-catch の) try で、パラメーターを取得しようとしています。
私はすでにfaces-config.xmlにも追加しました:
<managed-bean>
<managed-bean-name>Threads</managed-bean-name>
<managed-bean-class>forum.Threads</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>NewThread</managed-bean-name>
<managed-bean-class>forum.NewThread</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>