我有两个托管bean NavigationState
和ClientManager
都是viewScope。
NavigationState
具有viewAction上引用的getContentPage()
方法:
<c:metadata>
<c:viewAction action="#{navState.init('client', 'clientDetails')}"/>
</c:metadata>
ClientManager
具有在靴面searchingClients
上引用的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()
的{{1}}而不是来自NavigationState
的{{1}}
知道为什么会这样吗?
谢谢
布鲁诺
答案 0 :(得分:0)
viewAction
首先,检查您是否确实需要使用viewAction
,您也可以在支持bean中使用简单的@PostConstruct
。 (如果您想了解有关差异的更多信息,请参阅this answer。)
目前看来,每次GET请求都会触发viewAction。但是我对viewAction
内部不熟悉,也许你的支持bean是请求作用域,因此在每个ajax请求上初始化?
如果你摆脱它可能会有所帮助。如果您不需要viewParam
,请改用@PostConstruct
。
您的clientManager.searchingClients()
方法签名是什么样的?
如果它看起来像clientManager.searchingClients(AjaxBehaviorEvent e)
,使用parantheses工作,您必须选择clientManager.searchingClients
。
否则我不会在您的JSF标记中看到任何错误,它与showcase's first example完全相同。
但是,我从未真正使用过f:ajax
(或c:ajax
)。它总是有点古怪。但你也不必:如果PrimeFaces有p:ajax
,BootsFaces
we got our own recommended way of invoking 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或旧版本的展示引起的。它适用于Snapshot Showcase。