Jsf 查看会话范围bean中的参数

Jsf 查看会话范围bean中的参数,jsf,jsf-2,Jsf,Jsf 2,我在使用f:viewParam的会话范围bean时遇到一些问题。所以我有两个页面,test\u first.xhtml和test\u second.xhtml,还有一个TestBean.java first.xhtml: <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xml

我在使用
f:viewParam
的会话范围bean时遇到一些问题。所以我有两个页面,
test\u first.xhtml
test\u second.xhtml
,还有一个
TestBean.java

first.xhtml:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">

<h:head/>
<h:body>
<h:form>
    <h:link value="link1" outcome="test_second" >
        <f:param name="id" value="1"/>
    </h:link>
    <br/><br/>
    <h:link value="link2" outcome="test_second" >
        <f:param name="id" value="2"/>
    </h:link>
</h:form>
</h:body>
</html>
从first.xhtml开始运行,如果我在新选项卡中打开
link1
,然后在另一个新选项卡中打开
link2
。现在我有两页了

如果单击链接1中的“打印页面id”按钮,控制台中将打印
1
。在link2中,打印值将为
2

但是如果我单击链接1中的
Submit
按钮,将打印
2
,呈现的文本将从1更改为2。(因为link2是稍后打开的,bean是会话范围的?)

更新:为什么会出现这种情况?如果我单击“提交”,怎么还能打印“1”?)


基本上,我希望将bean作为会话来定义其他属性的作用域。那么,有没有关于这个或其他方法的想法?非常感谢

如果希望它在不同的选项卡或窗口中工作,则需要将这些特定于选项卡的属性放在ViewScope或RequestScope Bean上。对于特定于会话的属性,您可以创建另一个Bean并对其进行会话处理。

一个小注释:首先,h:链接不需要以表单形式出现。相关:Hi@BalusC,关于我更新的问题,您有什么想法吗?您似乎没有阅读或不理解我之前评论中的链接。我建议仔细阅读。基本上,您试图将视图范围的属性存储在会话范围的bean中,然后您抱怨视图范围的属性保存在会话范围而不是视图范围中。这种抱怨有什么意义?@BalusC我不明白为什么两个按钮上的情况不同。。。
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">
<f:metadata>
    <f:viewParam name="id" value="#{testBean.userId}" />
</f:metadata>
<h:head/>
<h:body>
<h:form>
    This is the second page.
    <h:outputText value="Selected id is #{testBean.userId}" />
    <h:commandButton value="Print page id" action="#{testBean.print()}" />

    <h:commandButton styleClass="submitButton" value="Submit" action="#{testBean.submit}">
        <f:ajax execute="@form" render="@form"/>
    </h:commandButton>
</h:form>
</h:body>
</html>
@ManagedBean
@SessionScoped
public class TestBean implements Serializable{
    private Integer userId;

public void print() {
    System.out.println(userId);
}

public void submit() {
    System.out.println(userId);
}
    /...
}