0

我可以在我的表单中添加动态输入字段:

                <h:form>
                    <h:dataTable id="tblFields" value="#{templateOptionBean.fields}"
                        var="field">
                        <h:column>
                            <h:inputText value="#{field.value}" />
                        </h:column>

                        <h:column>
                            <h:commandButton value="Remove">
                                <f:ajax
                                    listener="#{templateOptionBean.onButtonRemoveFieldClick(field)}"
                                    immediate="true" render="@form" />
                            </h:commandButton>
                        </h:column>
                    </h:dataTable>

                    <h:commandButton value="Add">
                        <f:ajax listener="#{templateOptionBean.onButtonAddFieldClick}"
                            execute="@form" render="tblFields" />
                    </h:commandButton>
                </h:form>

我的后端是这样的:

    @ManagedBean
@ViewScoped
public class TemplateOptions implements Serializable
{
    private List<Field> m_lFields;

    public TemplateOptions()
    {
        m_lFields = new ArrayList();

        m_lFields.add(new Field());
    }

    public void setFields(List<Field> p_lFields)
    {
        m_lFields = p_lFields;
    }

    public List<Field> getFields()
    {
        return m_lFields;
    }

    public void onButtonRemoveFieldClick(final Field p_oField)
    {
        m_lFields.remove(p_oField);
    }

    public void onButtonAddFieldClick(AjaxBehaviorEvent p_oEvent)
    {
        m_lFields.add(new Field());
    }
}

但是,当我将表单中的按钮更改为p:commandButtonthen 我的逻辑不再起作用。

但是,我想使用这些类型的按钮。因此,我该如何使用这种类型的按钮?

真的很感谢你的回答!!!

4

1 回答 1

0

好吧,如果您想使用 Primefaces 等其他组件库,那么这些组件可以与其他组件不同。因此,如果您查看 commandbutton 上的 primefaces 展示,您会看到如何轻松地在您的 bean 上进行 Ajax 调用(http://www.primefaces.org/showcase/ui/pprPartialTree.jsf)所以在您的情况下更改了两个你的 bean 和你的页面。让我们从页面开始:

<p:commandButton value="Ajax Submit" update="tblFields" id="ajax"  
         actionListener="#{templateOptionBean.onButtonAddFieldClick}" />

使用 primefaces,您不需要 f:ajax,您可以直接在命令按钮中使用它。

在您的 bean 中更改 onButtonAddFieldClick 方法。Primefaces 正在触发 javax.faces.event.ActionEvent (参见展示)所以像这样改变它:

public void onButtonAddFieldClick(ActionEvent  p_oEvent)
{
    m_lFields.add(new Field());
}

瞧,它与 p:commandButton 一起使用

于 2013-06-06T12:39:12.543 回答