2012-09-28 4 views
0

У меня есть шрифт. Я заполняю его из базы данных. Одним из полей является логическое значение, представленное флажком. Я хочу, чтобы, если я установил или снял флажок, я могу сохранить это изменение обратно в базу данных.JSF Невозможно сохранить изменения в строках данных в базе данных

Я попытался передать текущее значение строки управляемому компоненту для сохранения, но новое значение этого флажка не отражается в текущем объекте строки. Как я могу получить изменение в текущем объекте строки, чтобы я мог успешно сохранить изменения в БД?

Вот что я делаю сейчас ... Я попытался предоставить только то, что нужно. Если это слишком много информации или слишком мало, дайте мне знать. Благодарю.

@ManagedBean(name = "itemManagerBean") 
@ViewScoped 
public class ItemManagerBean implements Serializable { 
... 
    public ArrayList<Item> getAllItemsForUser() { 
     List list = ecf.findByPartyId(user.getPartyId()); 
     ArrayList<Item> itemList = new ArrayList<>(list); 
     return (itemList); 
    } 
... 
    public String saveItem(Item item){ 
     System.out.println(item.toString()); 
     ecf.updateRecord(item); 
     return (null); 
    } 
} 

//item class 
public class Item { 
    private BigInteger itemId; 
    private String name; 
    priave boolean saleable; //database column is not null 

    //getters and setters 
} 


//facelet 
<h:form> 
<p:dataTable id="id_itemList" 
      var="item" 
      value="#{itemManagerBean.allItemsForUser}" > 

    <p:column headerText="ID"> 
     <h:outputText value="#{item.itemId}" /> 
    </p:column> 

    <p:column headerText="Name"> 
     <h:outputText value="#{item.name}" /> 
    </p:column> 

    <p:column headerText="Saleable" > 
     <p:selectBooleanCheckbox value="#{item.saleable}" /> 
    </p:column> 

    <p:column width="15" > 
     <p:commandButton id="id_saveRowButton" icon="ui-icon-disk" 
      title="Save" action="#{itemManagerBean.saveItem(item)}"/> 
    </p:column> 
</p:dataTable> 
</h:form> 

ответ

1

Вам нужно создать selectedItem свойство в ItemManagerBean и обновить его значение, когда пользователь нажимает на commandButton:

В ItemManagerBean

private Item selectedItem; 
// getter and setter 

На странице Xhtml

<p:column width="15" > 
    <p:commandButton id="id_saveRowButton" icon="ui-icon-disk" 
     title="Save" action="#{itemManagerBean.saveItem}"> 
     <f:setPropertyActionListener value="#{item}" target="#{itemManagerBean.selectedItem}" /> 
    </p:commandButton> 
</p:column> 

(Обратите внимание, что вам не нужно проходить item через метод saveItem. Измените saveItem в управляемом компоненте, чтобы он работал с selectedItem вместо принятия входного элемента).

Ссылки:

example in the PrimeFaces showcase

Passing parameter to JSF action

BalusC blog

Смежные вопросы