在jsf中更新数据表中的选定行

时间:2014-11-17 06:36:07

标签: java jsf primefaces

我正在创建一个jsf应用程序,我需要执行CRUD。到目前为止,我已设法删除,创建和读取但无法更新记录。所以我的问题是,我想当用户单击更新按钮时弹出一个对话框,弹出所选行的详细信息并更新详细信息。这是我的示例代码。

        <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";
        }

1 个答案:

答案 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因为当你的ajax请求完成时它被执行,而不是在你按下按钮,跳过验证和这样的事情时触发动作(在你的情况下打开对话框)的onclick

如果您的问题是,使用更新/进程(ajax)机制刷新对话框内容,如果您喜欢第二个代码段,则会使用您当前的选择进行更新。