我正在尝试获取一些参数(现在是两个,但在另一个 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
所以它也很好:)。
现在,我通过以下方式检查 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() 方法,但没有帮助。
回到 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>
在 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
所以WTF?一旦它工作,但另一次它不会。
编辑:
对不起我忘记了。我通过 NewThread.xhtml 中的 commandButton 访问 NewThread.java:
<h:commandButton value="#{msg.add_thread}" action="#{NewThread.AddThread}"/>
它调用NewThread.java中的AddThread方法;在 AddThread 方法的 try(try-catch)中,我试图获取参数。
我也已经添加到 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>