将 Richfaces 意见箱迁移到 Primefaces 自动完成
Migrate Richfaces suggestionbox to Primefaces autocomplete
我们有以下问题。我们正在从 Richfaces 迁移到 Primefaces。以下是 Richfaces 实现的代码:
<h:panelGrid
columns="3"
cellspacing="0"
cellpadding="0">
<h:inputText
id="inpID"
converter="inpConverter"
value="#{session.a}"
valueChangeListener="#{session.sthChanged}"
onfocus="someFunctionA();"
onblur="someFunctionB();" />
<h:commandLink
action="#{session.redirectToSite()}"
styleClass="targetButton align-middle" />
<rich:suggestionbox
id="inpSuggest"
for="inpID"
frequency="1"
minChars="0"
var="result"
status="noStatus"
fetchValue="#{result}"
suggestionAction="#{manager.autocomplete}">
<a4j:ajax
event="select"
listener="#{session.setSthAndRedirect(result)}"
execute="@this" />
<f:facet name="nothingLabel">
<h:outputText value="No match found!" />
</f:facet>
<h:column>
<h:outputText value="#{result.x}" />
</h:column>
</rich:suggestionbox>
</h:panelGrid>
到目前为止,我在 Primefaces 中有以下内容:
<h:panelGrid
columns="3"
cellspacing="0"
cellpadding="0">
<h:inputText
id="inpID"
converter="inpConverter"
value="#{session.a}"
valueChangeListener="#{session.sthChanged}"
onfocus="someFunctionA();"
onblur="someFunctionB();" />
<h:commandLink
action="#{session.redirectToSite()}"
styleClass="targetButton align-middle" />
<p:autoComplete
id="inpSuggest"
placeholder="#{session.a}"
completeMethod="#{manager.autocomplete}"
var="result"
itemValue="#{result}"
queryDelay="4000"
emptyMessage="No match found!"
converter="inpConverter">
<p:ajax
event="itemSelect"
listener="#{session.setSthAndRedirect}" />
<p:column>
<h:outputText value="#{result.x}" />
</p:column>
<s:convertEntity />
</p:autoComplete>
</h:panelGrid>
问题来了。 Richfaces 有一个很好的功能。将建议框嵌套到 h:inputText 中的属性 'for'。我怎样才能对 Primefaces 做同样的事情?
因为它们 onw 上的两个组件都有效(即,建议和重定向以及在 h:inputText 中输入内容并按回车键时同样有效)但我没有找到像在 Richfaces 中那样嵌套它们的方法。
当使用 Primefaces 的自动完成功能时,通过输入的输入进行的选择不起作用,例如:
用户在 1 秒内输入内容并想按回车键 --> 这是不可能的,也是我们想要实现的。
非常感谢任何帮助。
此致
我找到了解决方案(通过 JS 和 p:remoteCommand):
<p:autoComplete
[...]
onkeyup="doSomething(event);"
[...] >
[...]
</p:autoComplete>
<p:remoteCommand
name="doRemote"
immediate="true"
actionListener="#{session.doIt}"
style="display: none;" />
<script type="text/javascript">
function doSomething(e) {
var val = document.getElementById("someId");
e = e || window.event;
if(e.keyCode == 13) {
doRemote([{name:'enteredValue', value:val.value}]);
return false;
} else {
return true;
}
}
</script>
我们有以下问题。我们正在从 Richfaces 迁移到 Primefaces。以下是 Richfaces 实现的代码:
<h:panelGrid
columns="3"
cellspacing="0"
cellpadding="0">
<h:inputText
id="inpID"
converter="inpConverter"
value="#{session.a}"
valueChangeListener="#{session.sthChanged}"
onfocus="someFunctionA();"
onblur="someFunctionB();" />
<h:commandLink
action="#{session.redirectToSite()}"
styleClass="targetButton align-middle" />
<rich:suggestionbox
id="inpSuggest"
for="inpID"
frequency="1"
minChars="0"
var="result"
status="noStatus"
fetchValue="#{result}"
suggestionAction="#{manager.autocomplete}">
<a4j:ajax
event="select"
listener="#{session.setSthAndRedirect(result)}"
execute="@this" />
<f:facet name="nothingLabel">
<h:outputText value="No match found!" />
</f:facet>
<h:column>
<h:outputText value="#{result.x}" />
</h:column>
</rich:suggestionbox>
</h:panelGrid>
到目前为止,我在 Primefaces 中有以下内容:
<h:panelGrid
columns="3"
cellspacing="0"
cellpadding="0">
<h:inputText
id="inpID"
converter="inpConverter"
value="#{session.a}"
valueChangeListener="#{session.sthChanged}"
onfocus="someFunctionA();"
onblur="someFunctionB();" />
<h:commandLink
action="#{session.redirectToSite()}"
styleClass="targetButton align-middle" />
<p:autoComplete
id="inpSuggest"
placeholder="#{session.a}"
completeMethod="#{manager.autocomplete}"
var="result"
itemValue="#{result}"
queryDelay="4000"
emptyMessage="No match found!"
converter="inpConverter">
<p:ajax
event="itemSelect"
listener="#{session.setSthAndRedirect}" />
<p:column>
<h:outputText value="#{result.x}" />
</p:column>
<s:convertEntity />
</p:autoComplete>
</h:panelGrid>
问题来了。 Richfaces 有一个很好的功能。将建议框嵌套到 h:inputText 中的属性 'for'。我怎样才能对 Primefaces 做同样的事情? 因为它们 onw 上的两个组件都有效(即,建议和重定向以及在 h:inputText 中输入内容并按回车键时同样有效)但我没有找到像在 Richfaces 中那样嵌套它们的方法。
当使用 Primefaces 的自动完成功能时,通过输入的输入进行的选择不起作用,例如: 用户在 1 秒内输入内容并想按回车键 --> 这是不可能的,也是我们想要实现的。
非常感谢任何帮助。
此致
我找到了解决方案(通过 JS 和 p:remoteCommand):
<p:autoComplete
[...]
onkeyup="doSomething(event);"
[...] >
[...]
</p:autoComplete>
<p:remoteCommand
name="doRemote"
immediate="true"
actionListener="#{session.doIt}"
style="display: none;" />
<script type="text/javascript">
function doSomething(e) {
var val = document.getElementById("someId");
e = e || window.event;
if(e.keyCode == 13) {
doRemote([{name:'enteredValue', value:val.value}]);
return false;
} else {
return true;
}
}
</script>