1

入力テキストを含む画面があり、その横に (+) ボタンがあります。ユーザーがそのボタンを押すと、フォームはその横 (または下など) に別の追加の inputText を追加する必要があります。

コードは次のとおりです。

<table>
  <tr>
    <td>
      <p:inputText value="#{controller.x}" />
      <img src="../images/ico_plus.png" />
    </td>
  </tr>
</table>

Controller.java で:

private String x;

public String getX(){return x}
public void setX(String val){x = val}

ページに複数のフィールドを設定し、コントローラーですべてのフィールド値を取得する必要があります

4

1 に答える 1

3

この質問には複数回回答がありました。基本的にListは、Bean のすべてのフィールドを保持する必要がありList、ボタンを使用してこれを削除または追加する必要があります。これは、すべてのアクションでリセットされるViewScopedか、そうでない場合に重要であることに注意してSessionScopedください。List

意見 :

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

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

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

ヘルパー クラス :

public class Field implements Serializable
{
    private String m_sName;

    public void setName(String p_sName)
    {
        m_sName = p_sName;
    }

    public String getName()
    {
        return m_sName;
    }
}

豆 :

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

    public Bean()
    {
        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());
    }
}
于 2013-05-26T18:46:39.247 に答える