Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 如何聚焦使用p:ajax更新的字段?_Jsf_Primefaces - Fatal编程技术网

Jsf 如何聚焦使用p:ajax更新的字段?

Jsf 如何聚焦使用p:ajax更新的字段?,jsf,primefaces,Jsf,Primefaces,我的PrimeFaces应用程序有问题 想象一个下拉菜单(p:selectOneMenu)和一个键盘字段(p:keyboard)。 下拉列表如下所示: <p:selectOneMenu id="artikelUserAuswahl" style="width: 80%;" filter="true" filterMatchMode="#{userBean.sucheMethodeArtikelKasse}" value="#{kassenContro

我的PrimeFaces应用程序有问题

想象一个下拉菜单(
p:selectOneMenu
)和一个键盘字段(
p:keyboard
)。 下拉列表如下所示:

<p:selectOneMenu
    id="artikelUserAuswahl"
    style="width: 80%;"
    filter="true"
    filterMatchMode="#{userBean.sucheMethodeArtikelKasse}"
    value="#{kassenController.artikelNummerDropdown}"
    disabled="#kassenController.tooMuch}"
    onchange="$(function(){PrimeFaces.focus('formKasse:anzahl');});">
        <f:selectItem
            itemLabel="#{resourceUtils.getI18N('label.artikel.waehlen')}"
            itemValue=""
            itemDisabled="true"
            noSelectionOption="true" />
        <f:selectItems
            value="#{kioskArtikelController.recordListIncludeSelected}"
            var="ki"
            itemLabel="#{ki.text}"
            itemValue="#{ki.artikelNummer}"/>
        <p:ajax
            update=":formKasse :formKasse:artikelNummer :formKasse:anzahl :formKasse:preis
                    formKasse:artikelBeschreibung :formKasse:bestandVorhanden :formKasse:buttonAbschluss"   
            listener="#{kassenController.addArtikelDropdown}" />
        <p:focus for="preis" />
</p:selectOneMenu>
现在别误会,所有的东西都在值、bean和表单方面工作(所有的东西都正确显示),但我有一个奇怪的行为,如果我从下拉列表中选择一个值,键盘会显示,但如果我单击一个数字(例如PrimeFaces键盘上的“1”),它就不会将其添加到输入字段中,因为焦点并不在那里

但只要我手动点击
p:keyboard
字段,它就会正常工作(问题:最终产品将在触摸屏显示器上运行)


PrimeFaces版本:6.0。

在本例中,焦点在ajax更新之前完成。因此,ajax更新将在设置焦点后启动。因为在这个ajax调用中,您还更新了刚刚设置焦点的字段,所以它将撤消设置焦点

解决方案是在
p:selectOneMenu
的ajax调用的oncomplete中设置焦点:

<p:ajax
    update=":formKasse :formKasse:artikelNummer :formKasse:anzahl :formKasse:preis
                formKasse:artikelBeschreibung :formKasse:bestandVorhanden :formKasse:buttonAbschluss"   
    listener="#{kassenController.addArtikelDropdown}" 
    oncomplete="$(function(){PrimeFaces.focus('formKasse:anzahl');});" 
 />


1:始终发布PF版本信息。2:如果运行“PrimeFaces.focus('formKasse:anzahl');}`从浏览器开发者控制台?3:如果删除ajax更新会怎么样?如果您在ajax更新之后(在它的oncomplete中)进行聚焦,或者……不,请让我创建一个答案。如果你回答自己的问题,你所做的编辑最好是以评论的形式发布。如果你回答自己的问题,这并没有错。但在其他人真正帮助你的情况下,最好的做法是询问他们是否愿意写答案。在这种情况下,我愿意。
<p:ajax
    update=":formKasse :formKasse:artikelNummer :formKasse:anzahl :formKasse:preis
                formKasse:artikelBeschreibung :formKasse:bestandVorhanden :formKasse:buttonAbschluss"   
    listener="#{kassenController.addArtikelDropdown}" 
    oncomplete="$(function(){PrimeFaces.focus('formKasse:anzahl');});" 
 />