【问题标题】:JSF how to submit a form via onchange of a selectOneRadioJSF 如何通过 selectOneRadio 的 onchange 提交表单
【发布时间】:2012-08-01 14:06:28
【问题描述】:

我正在尝试在选择 selectOneRadio 值时提交表单。我有下面的代码,但它没有进入我的#{contentEditorBacking.addNewsArticle}

有谁知道单击 selectOneRadio 时我如何进入该方法?

<p:panel header="News Article Title">
    <h:panelGrid columns="2">
        <h:outputLabel for="title" value="Title" style="font-weight: bold;"/>
        <p:inputText id="title" required="true" value="#{contentEditorBacking.newsTitle}" />
        <h:outputLabel value="Site" />
        <p:selectOneRadio value="#{contentEditorBacking.selectedNews}" layout="pageDirection" onchange="submit()">
            <f:selectItem itemLabel="Public" itemValue="Public" />
            <f:selectItem itemLabel="Member" itemValue="Member" />
        </p:selectOneRadio>
        <p:commandButton value="submit" action="#{contentEditorBacking.addNewsArticle}" />
    </h:panelGrid>
</p:panel>

【问题讨论】:

    标签: java jsf jsf-2 primefaces


    【解决方案1】:

    两个问题:

    • 要拦截单选按钮(和复选框)中的“更改”,您需要改用 click 事件。
    • &lt;p:commandButton&gt; 默认情况下是一个 ajax 按钮,它不准备像 JS submit() 执行的同步提交。

    只需使用&lt;p:ajax&gt; 代替,以便通过ajax 执行提交。请注意,您不需要指定event 属性,它已经默认为click

    <p:selectOneRadio value="#{contentEditorBacking.selectedNews}" layout="pageDirection">
        <f:selectItem itemLabel="Public" itemValue="Public" />
        <f:selectItem itemLabel="Member" itemValue="Member" />
        <p:ajax listener="#{contentEditorBacking.addNewsArticle}" />
    </p:selectOneRadio>
    <p:commandButton value="submit" action="#{contentEditorBacking.addNewsArticle}" />
    

    更新 根据 cmets,您似乎想使用参数导航到另一个页面。 addNewsArticle() 方法应如下所示,以便与 &lt;p:ajax listener&gt;&lt;p:commandButton action&gt; 兼容。

    public void addNewsArticle() throws IOException {
        ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
        ec.redirect(ec.getRequestContextPath() + "/next.xhtml?action=add");
    }
    

    【讨论】:

    • 在我的 addNewsArticle 中,我返回了一个带有 url 的字符串 + 一个查询字符串,所以我不能进行 ajax 提交。
    • 您在最初的问题中并不清楚这一点。您没有说明具体的功能要求。那就去第一种方法吧。顺便说一句,如果该方法只返回一个字符串,那么您也可以将唯一的字符串直接放在action 属性中,就像action="next.xhtml?action=add" 左右一样。不要忘记禁用 ajax 行为 :)
    • 很抱歉没有具体说明,我试图让问题简短明了。我实际上是在检查几件事,然后生成一个字符串,所以我需要使用支持方法。
    • 如果我将onchange 更改为onclick,什么也不会发生,但如果我将它留在onchange,它会刷新页面,但它不会进入我的支持者。如果我真的点击提交按钮,它会进入我的支持方法
    • 请详细描述“不起作用”。究竟会发生什么,究竟会发生什么?我面前没有你的 webapp/代码,所以我可以自己调试/跟踪它。顺便说一句,我已经更新了第二种方法如何为你工作的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多