Я пытаюсь получить несколько параметров (сейчас их два, но на другом xhtml, вероятно, мне понадобится больше).
На странице index.html у меня есть ссылка на страницу Threads.xhtml с параметрами user_id и section_id:
<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 у меня есть ссылка (одна ссылка, а не dataTable, как на index.xhtml - для создания нового раздела), на страницу NewThread.xhtml, с параметрами user_id и section_id:
<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
Так что тоже приятно :).
Теперь я проверяю на странице NewThread.xhtml значения user_id и section_id следующим образом:
<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(), но это не помогло.
Возвращаясь к index.xhtml, когда я нажимаю ссылку на один из разделов, например. второй раздел (любым пользователем, например, user_id=5), он переходит в Threads.xhtml:
Project/faces/Threads.xhtml?user_id=5§ion_id=2
И в Threads.xhtml у меня есть список потоков второго раздела (но эта часть кода 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>
А в Java-коде Threads.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.java с помощью commandButton в NewThread.xhtml:
<h:commandButton value="#{msg.add_thread}" action="#{NewThread.AddThread}"/>
и он вызывает метод AddThread в NewThread.java; и в попытке (из try-catch) метода AddThread я пытаюсь получить параметры.
Я также уже добавил в 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>