2016-09-02 1 views
1

ユーザーは、エントリを追加、編集、および削除できるようにするために、ページ上にストリングのリストを表示する必要があります。私はこれを達成するためにDataTableを使用すると考えました。RowEditorを使用したStringのDataTableは変更を保存しません

DataTableに値が表示され、[削除]アイコンがクリックされると行が削除され、[追加]ボタンがクリックされると行が追加されます。 ただし、鉛筆アイコンをクリックしてRowEditorを使用すると、チェックマークをクリックしても変更内容が反映されません。行の値は空白に戻ってしまうだけです。私はすべての作業きちんと私のプロジェクト内の他のページからのDataTableマークアップの大部分をコピーしたhttp://imgur.com/a/dxlht

-

はここで起こって問題点を示すGIFです。私がここで見ることができる唯一の違いは、これが複雑なオブジェクトではなく、StringのDataTableであることです。これは、InputTextの値が単なるStringの場合、RowEditorの「入力」ファセットに影響しますか?ここで

はDataTableのマークアップです:私はPrimeFaces 5.3/JSF 2.0を使用しています

private List<String> configs; 

public List<String> getConfigs() { 
    return this.configs; 
} 

public void setConfigs(List<String> configs) { 
    this.configs = configs; 
} 

public void removeEntry(String entry) { 
    this.configs.remove(entry); 
} 

public void addEntry() { 
    this.configs.add(""); 
} 

:ここ

<h:form> 
    <p:dataTable id="configTable" value="#{bean.configs}" var="config" 
     editable="true" editMode="row" emptyMessage="No entries exist."> 
    <p:column> 
     <p:cellEditor> 
     <f:facet name="output"><h:outputText value="#{config}" /></f:facet> 
     <f:facet name="input"><p:inputText value="#{config}" /></f:facet> 
     </p:cellEditor> 
    </p:column> 
    <p:column> 
     <p:rowEditor /> 
    </p:column> 
    <p:column> 
     <p:commandLink update="configTable" styleClass="ui-icon ui-icon-trash" process="@this" 
      actionListener="#{bean.removeEntry(config)}" /> 
    </p:column> 
    <f:facet name="footer"> 
     <p:commandButton value="Add Entry" update="configTable" icon="ui-icon-plus" style="float:right;" process="@this" 
      actionListener="#{bean.addEntry()}" /> 
    </f:facet> 
    </p:dataTable> 
</h:form> 

は、関連するBeanコードです。

答えて

0

JSFは、行の編集を終了するためにチェックマークを押すと、テーブル行がどのクラスであってもセッターメソッドを呼び出します。

Stringクラスにはsetterメソッドがないため、1つのフィールド(getterとsetterを使用)でラッパークラスを作成し、configsオブジェクトをyourClassオブジェクトのリストに変更する必要があります。

関連する問題