0

我有两个托管 bean NavigationStateClientManager它们都是 viewScope。

NavigationState具有getContentPage()在 viewAction 上引用的方法:

<c:metadata>
    <c:viewAction action="#{navState.init('client', 'clientDetails')}"/>
</c:metadata>

ClientManager具有searchingClientsbootsfaces 上引用的方法inputText

 <b:inputText placeholder="nome" id="name"
                value="#{clientManager.clientOnSearch.firstName}"
                style="background: rgb(251, 251, 251) none repeat scroll 0% 0%;
                    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);">
            <c:ajax execute="name" event="keyup" 
            listener="#{clientManager.searchingClients()}" />       
            </b:inputText>

当我在此输入文本字段上键入一个键时,调用的唯一方法是getContentPage()from theNavigationState而不是searchingClients()fromclientManager

知道为什么会这样吗?

谢谢

布鲁诺

4

1 回答 1

0

的使用viewAction

首先,检查你是否真的需要使用 a viewAction,你也可以在你的 backing bean 中使用 simple @PostConstruct。(如果您想了解有关差异的更多信息,请参阅此答案。)

目前看起来 viewAction 在每个 GET 请求上都会被触发。但是我不熟悉viewActions 内部,也许您的支持 bean 是请求范围的,因此在每个 ajax 请求上都被初始化?

如果你摆脱它,它可能会有所帮助。如果您不需要viewParams,只需使用@PostConstruct

带有 BootsFaces 的 Ajax

您的clientManager.searchingClients()方法的签名如何?
如果看起来像clientManager.searchingClients(AjaxBehaviorEvent e),使用括号不起作用,则必须选择clientManager.searchingClients那时。

否则,我在您的 JSF 标记中看不到任何错误,这与展示的第一个示例完全相同 。

但是,我从未真正使用过f:ajax(或c:ajax在您的情况下)。它总是有点古怪。但是您也不必这样做:如果是 PrimeFaces,p:ajax并且如果BootsFaces 我们有自己推荐的调用 ajax listeners 的方式

所以也许你想试试这个:

 <b:inputText placeholder="nome" id="name"
     value="#{clientManager.clientOnSearch.firstName}"
     style="background: rgb(251, 251, 251) none repeat scroll 0% 0%;
            box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);"
     onkeyup="ajax:clientManager.searchingClients()"/>

在尝试当前的 0.8.1 Showcase 时,我发现 InputText ajax 示例不太好用,所以我会调查这是由 0.8.1 还是旧版本的 showcase 引起的。不过,它可以在Snapshot Showcase中使用。

于 2016-04-21T23:37:09.963 回答