2012-01-31 54 views
0

我在我的JSF2应用程序的标题中有ap:poll元素,每秒触发以检查拍卖结束时间(这可能会在后台的任何时候发生变化,我必须留在最前面)。我现在注意到,每当轮询触发时,标题中的所有“呈现”方法都会被调用。这是为什么?它如何被阻止?呈现的属性在标题中被重复调用(编辑:h:链接vs h:用于导航的commandLink和会话属性)

,可能是有关该代码的一部分:

<td>Remaining Time: 
    <h:outputText id="remTime" value="#{auctionBean.remainingTime}"/>  
    <p:poll listener="#{auctionBean.calcRemainingTime()}" interval="1" update="remTime" /> 
</td> 

编辑:

更多关于我的功能要求的位。我有一个有8个链接的主页:标题5和页脚3。我还有一个搜索组件,我需要显示 - 一旦用户登录了 - 其中3个链接。我这样做的方式是在会话中传递“fromPage”属性,并决定显示或隐藏搜索组件。

当我为所有主页链接使用h:commandLink时,它都可以正常工作。但是另一个问题出现了:JSF url只是一次点击而已。这是一个已知的问题,所以我不会详细解释它。

好的。所以我搬到了h:link。现在,网址每次点击都会更改,并且行为正常。但是对于每一次点击,所有的“结果”方法 - 主页上的所有8个链接 - 从左到右调用,从上到下调用​​。是的,每次点击都会调用所有8个“结果”方法。 URL正确更改并且页面显示正确,但会话中的“fromPage”属性始终用于最后一个链接:右下角的链接。

为了让事情变得更奇怪,我的搜索组件总是显示出来,因为标题上的最后一个链接是它应该显示的链接。当我通过在页面上放置另一个链接(在右上角)来测试此功能时,对于搜索不应显示的页面,搜索现在不会显示。

好的。我可以放弃显示正确页面的url,切换回commandLinks,继续我的生活。但我想要正确,并帮助我的用户。有解决方案吗?

+0

有人吗?这个问题没有解决方案? – Herzog 2012-01-31 20:04:39

+0

我编辑了我的问题。任何想法? – Herzog 2012-02-02 10:07:07

回答

0

对进程属性使用部分处理,只处理必要的处理。

+0

感谢您的回应,Catgatay。这实际上是我试图用p:poll标记做的事情:或者我错过了什么? – Herzog 2012-01-31 13:41:35

+0

我编辑了我的问题。任何想法? – Herzog 2012-02-02 10:06:48

0

h:link使用JSF规范所称的“抢先导航”。从规格:

在 呈现响应阶段,客户端激活之前的链路(并且可能永远不会激活的链接)的情况下,导航解决。

这样,您可以像使用h:commandLink动作一样使用导航规则。然而,如果你的结果是一个EL方法表达式,那么你在调用它的过程中将调用你的“结果方法”。这是预期的行为。

我认为可能适用于您的替代方法是向结果添加查询参数,并在目标页面上放置一个f:viewParam。例如:

page1.xhtml

<h:link value="Page 2" outcome="page2?fromPage=page1"/> 

第2页。xhtml

<f:metadata> 
    <f:viewParam name="fromPage" value="#{page2.fromPage}"/> 
</f:metadata> 

现在您可以使用#{page2.fromPage}来执行您的条件呈现。这可能也避免了在会话中存储fromPage