3

我正在尝试在选择 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>
4

1 回答 1

9

两个问题:

  • 要拦截单选按钮(和复选框)中的“更改”,您需要该click事件。
  • 默认情况下,它<p:commandButton>是一个 ajax 按钮,它没有像 JS 那样为同步提交做好准备submit()

只需使用<p:ajax>,以便提交由 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}" />

根据评论更新,您似乎想导航到带有参数的另一个页面。然后该addNewsArticle()方法应如下所示,以便它与<p:ajax listener>和兼容<p:commandButton action>

public void addNewsArticle() throws IOException {
    ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
    ec.redirect(ec.getRequestContextPath() + "/next.xhtml?action=add");
}
于 2012-08-01T14:12:31.243 回答