使用对话框编辑数据表行

时间:2013-09-20 08:20:52

标签: java jsf primefaces datatable dialog

我正在使用Primefaces 3.5,Jsf 2和我有一个数据表,现在我实现了一个像primefaces showcase(singlerowselection)的对话框,它工作正常,但我想编辑对话框中的行。此外,我希望inputtext填充数据表单元格中的数据,以便您可以轻松编辑它!(就像行编辑器一样,只是在对话框中) 不是这样的:http://i.stack.imgur.com/J55j0.jpg 水印有效,但没有选项,因为如果要编辑它,文本会消失。 它应该是这样的:http://i.stack.imgur.com/cAFLo.jpg

那么,有人能告诉我如何显示和编辑细胞数据吗?

这是xhtml(对话框不在数据表中):

<p:dialog id="dialog" header="Server Detail" widgetVar="serDialog"
  resizable="false" showEffect="clip" hideEffect="fold" dynamic="true">

  <h:panelGrid id="display" columns="3" cellpadding="4">
     <h:outputText value="Data Center Location " />
    <p:inputText id="datacenter" value="#{server.dataCenterLocation}"></p:inputText>

    <h:outputText value="Identification " />
    <h:inputText id="identification" value="#{server.identification}"></h:inputText>
    <p:watermark for="identification"
    value="#{serverBean.selectedServer.identification}"></p:watermark>

  </h:panelGrid>

     <p:growl id="growl" showDetail="true" sticky="false" />
     <p:commandButton value="Edit Server" action="#{server.onEdit}"   update="@form, growl" />
</p:dialog>

bean中的方法(name = server)  (没有带有getter和setter的selectedServer(name = serverBean)):

public void onEdit() throws  Exception {
    PreparedStatement ps = null;
    Connection con = null;
    int i = 0;
    try {
        Server ser = new Server();

        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
                .newInstance();
        con = DriverManager
                .getConnection("jdbc:sqlserver://...");
        String sql = "UPDATE VAI_Serverlist SET [Data Center Location]= ?,...  WHERE Identification='"
                + ser.identification + "'";

        ps = con.prepareStatement(sql);
        ps.setString(1, ser.dataCenterLocation);
        ...
        i = ps.executeUpdate();
    } catch (SQLException e) {
        System.out.println(i);
        e.printStackTrace();
    } finally {
        try {
            con.close();
            ps.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

提前致谢!

1 个答案:

答案 0 :(得分:0)

<h:form id="form">   
                        <p:dataTable  id="table" var="item" value="#{ManagedBean.list()}" 


                    <f:facet name="footer">  

                                    <p:commandButton id="showUpdateButton" value="#{msgForms['actions.Edit']}" 
                                                     update=":update_form" 
                                                     icon="ui-icon-pencil"  
                                                     style="margin: 0%"
                                                     ajax="true" 
                                                     immediate="true" 
                                                     oncomplete="PF('DialogUpdate').show()"
                                                     />                                                                                                         
                                       </f:facet>  


                        </p:dataTable>

                         <h:form id="form">  


<p:dialog id="dialog_update"
                              modal="true"
                              header="${msgForms['titles.update']}" 
                              widgetVar="DialogUpdate" resizable="false"  
                              showEffect="clip" hideEffect="fold"                              
                              >  
                        <h:form id="update_form">
                            <h:panelGrid columns="3" id="panel"> 
        <!--FIELDS-->  
                            <h:outputLabel for="nombre" value="#{msgForms['fields.nombre']}:" /> 
                            <p:inputText id="nombre"  
                                         value="#{ManagedBean.selectedItem.nombre}" 
                                         required="true"
                                         requiredMessage="#{msgForms['field.required']}"
                                         >   
                                <p:ajax event="keyup" update="nombreMsg" global="false"/>  
                            </p:inputText>  

                            </h:panelGrid>   

                            <!--/FIELDS-->
                            <!-- BUTTONS ACTIONS-->  
                            <p:commandButton id="updateButtonDg" 
                                             value="#{msgForms['actions.update']}" 
                                             icon="ui-icon-pencil"    
                                             actionListener="#{ManagedBean.update()}"
                                             update=":form:"
                                             style="margin: 0%"  
                                             ajax="true"
                                             onclick="DialogUpdate.hide();" 
                                             > 
                            </p:commandButton>
                            <!-- /BUTTONS ACTIONS-->
                        </h:form>
                    </p:dialog>  




    the MANAGED BEAN..       

                    @Named("ManagedBean")

@RequestScoped
public class ManagedBean  { 
    //Spring Item Service is injected... 
    @Inject
    IItemService itemService;  //if not required because if you use dependencies injection to connect with de database
    private List<Item> filteredItems; //only if you use the  attribute: filteredValue="#{ManagedBean.filteredItems}" in the dataTable 
    private List<Item> items; 



                    public void update() {  
                    //here you save the changes in the data base
                    this.itemService().updateItem(this.selectedItem); 



    }

这或多或少是我使用的,我不能把文字代码,但我想我没有留下任何重要的东西,所以我希望它可以帮助你。

我建议你看一下教程 http://www.javacodegeeks.com/2012/04/jsf-2-primefaces-3-spring-3-hibernate-4.html

它展示了如何在项目中集成jsf2 Spring3 hibernate以及如何使用注释注入依赖项,我建议你使用hibernate框架与数据库进行交互