Jsf onchange=";提交();重新加载我的PrimeFaces移动页面

Jsf onchange=";提交();重新加载我的PrimeFaces移动页面,jsf,mobile,primefaces,submit,onchange,Jsf,Mobile,Primefaces,Submit,Onchange,我在使用PrimeFaces Mobile的JSF项目中遇到了问题。此页面有多个pm:views 我有一个单选按钮列表,如下所示: <p:selectOneRadio value="#{bean.currentElement}" converter="omnifaces.SelectItemsConverter" onchange="submit()"

我在使用PrimeFaces Mobile的JSF项目中遇到了问题。此页面有多个
pm:views
我有一个单选按钮列表,如下所示:

<p:selectOneRadio value="#{bean.currentElement}" converter="omnifaces.SelectItemsConverter"
                                          onchange="submit()" 
                                          valueChangeListener="#{bean.elementChanged}">

                            <f:selectItems value="#{bean.currentItem.elements}" var="element"
                                           itemLabel="#{element.elementName}" itemValue="#{element}" />

                        </p:selectOneRadio>
public void elementChanged(ValueChangeEvent e) {
    currentElement = (Element) e.getNewValue();

    System.out.println(getCurrentElement().getElementName());
}
<p:selectOneRadio value="#{bean.currentElement}" converter="omnifaces.SelectItemsConverter">
    <f:selectItems value="#{bean.currentItem.elements}" var="element"
        itemLabel="#{element.elementName}" itemValue="#{element}" />
    <p:ajax listener="#{bean.elementChanged}" />
</p:selectOneRadio>
问题是,每当我单击单选按钮元素时,我的页面都会完全重新加载到开始视图,这与
onchange=“submit()”
有关。我也尝试过
f:ajax
元素,但这似乎对我的单选按钮不起作用,因为我使用它时无法单击它们。 是否有可能只提交我当前的表单或pm:view(不带f:ajax)


PS:我也在一个PrimeFaces移动页面上尝试过这一点,它完全有效,因为应用程序只包含一个页面。

使用PrimeFaces组件时,应该使用
而不是
。只要去掉
onchange=“submit()”
。这确实调用了一个同步(非ajax)表单提交,它完全解释了页面重新加载。您还需要将
值更改侦听器
替换为
valueChangeListener
对于作业来说是错误的工具,您只想在设置新选择的值时调用JSF操作方法

总而言之,重写应该如下所示:

<p:selectOneRadio value="#{bean.currentElement}" converter="omnifaces.SelectItemsConverter"
                                          onchange="submit()" 
                                          valueChangeListener="#{bean.elementChanged}">

                            <f:selectItems value="#{bean.currentItem.elements}" var="element"
                                           itemLabel="#{element.elementName}" itemValue="#{element}" />

                        </p:selectOneRadio>
public void elementChanged(ValueChangeEvent e) {
    currentElement = (Element) e.getNewValue();

    System.out.println(getCurrentElement().getElementName());
}
<p:selectOneRadio value="#{bean.currentElement}" converter="omnifaces.SelectItemsConverter">
    <f:selectItems value="#{bean.currentItem.elements}" var="element"
        itemLabel="#{element.elementName}" itemValue="#{element}" />
    <p:ajax listener="#{bean.elementChanged}" />
</p:selectOneRadio>

不要忘记从
elementChanged()
方法中删除
ValueChangeEvent
参数。要访问选定的值,只需直接访问
currentElement
属性即可

另见: