2014-11-17 2 views
1

Я создаю приложение jsf, и мне нужно выполнить CRUD. До сих пор мне удавалось удалять, создавать и читать, но я не смог обновить запись. Поэтому моя проблема заключается в том, что, когда пользователь нажимает кнопку обновления, открывается диалоговое окно с информацией о выбранной строке и обновляется информация , Вот мой пример кода.Обновление выбранной строки в datatable в jsf

 <p:panelGrid columns="2"> 
     <h:outputLabel value="Account Id"/> 
     <h:inputText value="#{accCtr.acc.accountNum}" /> 
     <h:outputLabel value="Account Bal"/> 
     <h:inputText value="#{accCtr.acc.balance}"/> 
     <h:outputLabel /> 
     <p:commandButton action="#{accCtr.create()}" value="Enter" update="dt"/> 
    </p:panelGrid> 
      <p:dataTable value="#{accCtr.list}" var="i" id="dt" style="width: 40%;" rowStyleClass="height" rowKey="#{accCtr.acc.accountNum}" > 

       <p:column> 
        <f:facet name="header">Account Num</f:facet> 
        #{i.accountNum} 
       </p:column> 
        <p:column> 
        <f:facet name="header">Account Balance</f:facet> 
        #{i.balance} 
       </p:column> 
        <p:column> 
        <f:facet name="header">Action</f:facet> 
        <p:commandButton value="Remove" styleClass="height" 
            action="#{accCtr.removeAccount(i)}" 
            /> 
        <p:commandButton value="Edit" styleClass="height" 
            onclick="pop.show()" 
            action="#{accCtr.edit(i)}" 
             > 

        </p:commandButton> 
       </p:column> 
      </p:dataTable> 
     </h:form> 
    <p:dialog widgetVar="pop" header="Account Edit"> 
     <h:form> 
      <p:panelGrid columns="2"> 

       <h:outputLabel value="Account Balance"/> 
       <h:inputText value="#{accCtr.acc.balance}"/> 
       <h:outputLabel/> 
       <p:commandButton value="Update"/> 
      </p:panelGrid> 
     </h:form> 
    </p:dialog> 

может кто-то помочь мне. и мой бэк-бэк.

@ManagedBean(name="accCtr") 
@SessionScoped 
public class AccountController { 



     List<AccountTable> list=new ArrayList<>(); 
     public AccountController() { 
     } 
     private Account_dao getDao() 
     { 
      return new Account_dao(); 
     } 
     public List<AccountTable> getList() { 

      return getDao().findAll(); 
     } 

     public void setList(List<AccountTable> list) { 
      this.list = list; 
     } 
     public void removeAccount(AccountTable acc) { 
      getDao().remove(acc); 
     } 
     public AccountTable acc=new AccountTable(); 

     public AccountTable getAcc() { 
      return acc; 
     } 

     public void setAcc(AccountTable acc) { 
      this.acc = acc; 
     } 

     public void edit(AccountTable acc) { 
      setAcc(acc); 
     } 
     public String create() 
     { 
      this.acc.setUserid(10); 
      getDao().create(this.acc); 
      return "index"; 
     } 
+0

Ваш метод создания выглядит так неправильно, я имею в виду его первую строку. И ваш метод редактирования является неполным. В datatable есть атрибут под названием selection и selectionMode, который вы можете использовать для привязки к выбранному объекту в вашем фоновом бэкэнде. Http://www.primefaces.org/showcase/ui/data/datatable/selection.xhtml –

+0

@ Sujan метод create работает правильно. Я могу вставить запись – MorganM

+0

Вы жестко кодируете идентификатор пользователя, делаете ли вы это для целей тестирования? –

ответ

0

Меняйте

<p:commandButton value="Edit" styleClass="height" 
           onclick="pop.show()" 
           action="#{accCtr.edit(i)}" 
            /> 

в

<p:commandButton value="Edit" styleClass="height" 
           oncomplete="pop.show()" 
           actionListener="#{accCtr.edit(i)}" 
           process="@this" update=":your_dialog_form_id" 
            /> 

Несколько вещей: В общем action atributte используется для навигации (перенаправление на другую страницу, например). Также лучше использовать oncomplete beacuse, который будет выполнен, когда ваш запрос ajax будет завершен, вместо onclick, который запускает действие (откройте диалоговое окно в вашем случае) в тот момент, когда вы нажимаете кнопку, пропуская проверку и такие вещи.

Если возникла ваша проблема, обновление содержимого диалога с помощью механизма update/process (ajax) будет обновляться с вашим текущим выбором, если вы сделаете второй фрагмент.

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