Võ Văn Hải's blog

Chỉ có một điều tuyệt đối đó là mọi thứ đều tương đối…

JSF – Làm việc với CƠ SỞ DỮ LIỆU

JSF – Làm việc với CƠ SỞ DỮ LIỆU

Trong bài này, chúng ta làm việc với JSF kết nối cơ sở dữ liệu sử dụng JDBC thể liệt kê 1 bảng dữ liệu, thêm mẫu tin mới, cập nhật thông tin của dòng dữ liệu cũng như xóa 1 dòng dữ liệu. Giả sử Database được thiết kế như sau:

clip_image002

Sau khi hoàn tất, ta có giao diện như sau:

clip_image004

Khi nhấn link “Insert New” sẽ cho ta trang thêm Lớp học mới

clip_image005

Khi nhấn Link Edit, sẽ load thông tin của dòng được chọn và cho hiệu chỉnh

clip_image006

Khi nhấn link Delete, sẽ xóa dòng được chọn.

Trong ví dụ này tôi dùng NetBeans IDE để thiết kế (Eclipse hay IDE khác cũng vậy)

Bước 1: Tạo 1 Web Application mới, chọn Framework là Java Server Faces như hình

clip_image007

Bước 2: Tạo Manage-bean

package vovanhai.wordpress.com;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import javax.faces.component.UIComponent;
import javax.faces.component.html.HtmlDataTable;
import javax.faces.event.ActionEvent;

/**
 *
 * @author VoVanHai
 */
public class LophocBean {

    private String msLop;
    private String tenLop;
    private String tenGVCN;

    /** Creates a new instance of LophocBean */
    public LophocBean() {
    }

    public LophocBean(String msLop, String tenLop, String tenGVCN) {
        this.msLop = msLop;
        this.tenLop = tenLop;
        this.tenGVCN = tenGVCN;
    }

    public String getMsLop() {
        return msLop;
    }

    public void setMsLop(String msLop) {
        this.msLop = msLop;
    }

    public String getTenGVCN() {
        return tenGVCN;
    }

    public void setTenGVCN(String tenGVCN) {
        this.tenGVCN = tenGVCN;
    }

    public String getTenLop() {
        return tenLop;
    }

    public void setTenLop(String tenLop) {
        this.tenLop = tenLop;
    }

    /**
     * Liệt kê các record của bảng lớp học để hiển thị lên table
     * @return
     */
    public ArrayList<LophocBean> getAllLophoc() {
        ArrayList<LophocBean> lst = new ArrayList<LophocBean>();
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=GC0563", "sa", "");
            ResultSet rs = con.createStatement().executeQuery("select * from Lophoc");
            while (rs.next()) {
                LophocBean lh = new LophocBean(
                        rs.getString(1),
                        rs.getString(2),
                        rs.getString(3));
                lst.add(lh);
            }
            con.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return lst;
    }

    /**
     * Action dùng để insert 1 mẫu tin mới
     * @return success nếu thành công
     */
    public String InsertNew() {
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=GC0563", "sa", "");
            String sql = "insert into lophoc values(?,?,?)";
            PreparedStatement ps = con.prepareStatement(sql);
            ps.setString(1, msLop);
            ps.setString(2, tenLop);
            ps.setString(3, tenGVCN);
            int x = ps.executeUpdate();
            if (x > 0) {
                return "success";
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "failed";
    }

    /**
     * Action delete dùng để xóa mẫu tin được chọn
     * @param evt
     */
    public void deleteAction(ActionEvent evt) {
        // We get the table object
        HtmlDataTable table = getParentDatatable((UIComponent) evt.getSource());
        // We get the object on the selected line.
        Object o = table.getRowData();
        LophocBean selLh = (LophocBean) o;
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=GC0563", "sa", "");
            String sql = "delete lophoc where msLop=?";
            PreparedStatement ps = con.prepareStatement(sql);
            ps.setString(1, selLh.msLop);
            ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Action dùng để chọn mẫu tin cần cập nhật
     * @param evt
     */
    public void editBook(ActionEvent evt) {
        // We get the table object
        HtmlDataTable table = getParentDatatable((UIComponent) evt.getSource());
        // We get the object on the selected line.
        Object o = table.getRowData();
        LophocBean lh = (LophocBean) o;
        this.msLop = lh.msLop;
        this.tenLop = lh.tenLop;
        this.tenGVCN = lh.tenGVCN;
    }

    // Method to get the HtmlDataTable.
    private HtmlDataTable getParentDatatable(UIComponent compo) {
        if (compo == null) {
            return null;
        }
        if (compo instanceof HtmlDataTable) {
            return (HtmlDataTable) compo;
        }
        return getParentDatatable(compo.getParent());
    }

    /**
     * Cập nhật dữ liệu được chọn lên cơ sở dữ liệu.
     * @return
     */
    public String update() {
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=GC0563", "sa", "");
            String sql = "update lophoc set tenLop=?, tenGVCN=? where msLop=?";
            PreparedStatement ps = con.prepareStatement(sql);
            ps.setString(1, tenLop);
            ps.setString(2, tenGVCN);
            ps.setString(3, msLop);
            int x = ps.executeUpdate();
            if (x > 0) {
                return "success";
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "failed";
    }
}

Bước 3: Thiết kế giao diện

Tạo trang liệt kê danh sách các lớp học: Lophoc.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<f:view>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
            <title>JSP Page</title>
        </head>
        <body>
            <h1 align="center">DANH SÁCH LỚP HỌC</h1>
            <h:form id="frm">
                <h:dataTable width="100%" border="1"                             
                             var="lh" id="table"
                             value="#{lophoc.allLophoc}"
                             >
                    <h:column id="ms" headerClass="headertext">
                        <f:facet name="header">
                            <h:outputText style="headerText" value="Mã số Lớp"/>
                        </f:facet>
                        <h:outputText id="ml" value="#{lh.msLop}"/>
                    </h:column>
                    <h:column id="ten" headerClass="headertext">
                        <f:facet name="header">
                            <h:outputText style="headerText" value="tên Lớp"/>
                        </f:facet>
                        <h:outputText id="tl" value="#{lh.tenLop}"/>
                    </h:column>
                    <h:column id="gv" headerClass="headertext">
                        <f:facet name="header">
                            <h:outputText style="headerText" value="Giáo viên chủ nhiệm"/>
                        </f:facet>
                        <h:outputText id="gvcn" value="#{lh.tenGVCN}"/>
                    </h:column>
                    <h:column id="actions" headerClass="headertext">
                        <f:facet name="header">
                            <h:commandLink value="Insert New"  action="insert" immediate="true"/>
                        </f:facet>
                        <h:commandLink value="Edit" immediate="true" 
                                       actionListener="#{lophoc.editBook}" action="edit"/> -
                        <h:commandLink value="Delete" actionListener="#{lophoc.deleteAction}"/>
                    </h:column>

                    <%--<f:facet name="footer">
                        <h:panelGroup style="align:right">
                            <h:outputLabel value="Number of records"/>
                        </h:panelGroup>
                    </f:facet>--%>
                </h:dataTable>
            </h:form>
        </body>
    </html>
</f:view>

Trang edit.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<f:view>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
            <title>JSP Page</title>
        </head>
        <body>
            <h1 align="center"><h:outputText value="Hiệu chỉnh thông tin học sinh"/></h1>
            <h:form>
                <h:panelGrid columns="2">
                    <h:outputLabel for="ms" value="Mã số lớp"/>
                    <h:inputText id="ms" value="#{lophoc.msLop}" readonly="true"/>

                    <h:outputLabel for="ht" value="Tên lớp"/>
                    <h:inputText id="ht" value="#{lophoc.tenLop}"/>
                    
                    <h:outputLabel for="gv" value="Tên GVCN"/>
                    <h:inputText id="gv" value="#{lophoc.tenGVCN}"/>
                </h:panelGrid>
                <h:commandButton value="Update" action="#{lophoc.update}"/>
            </h:form>
        </body>
    </html>
</f:view>

Trang insert.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<f:view>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
            <title>JSP Page</title>
        </head>
        <body>
            <h1 align="center"><h:outputText value="Thêm lớp học mới"/></h1>
            <h:form>
                <h:panelGrid columns="2">
                    <h:outputLabel for="ms" value="Mã số lớp"/>
                    <h:inputText id="ms" value="#{lophoc.msLop}"/>
                    <h:outputLabel for="ht" value="Tên lớp"/>
                    <h:inputText id="ht" value="#{lophoc.tenLop}"/>
                    <h:outputLabel for="gv" value="Tên GVCN"/>
                    <h:inputText id="gv" value="#{lophoc.tenGVCN}"/>
                </h:panelGrid>
                <h:commandButton value="Insert" action="#{lophoc.InsertNew}"/>
            </h:form>
        </body>
    </html>
</f:view>

Trang error.jsp cho việc hiển thị lỗi

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<f:view>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
            <title>JSP Page</title>
        </head>
        <body>
            <h1><h:outputText value="Error"/></h1>
        </body>
    </html>
</f:view>

Bước 4: Cấu hình

Facees-config.xml ở dạng PageFlow

clip_image009

dạng XML

<?xml version='1.0' encoding='UTF-8'?>

<faces-config version="1.2" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
    <managed-bean>
        <managed-bean-name>lophoc</managed-bean-name>
        <managed-bean-class>vovanhai.wordpress.com.LophocBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    <navigation-rule>

    </navigation-rule>
    <navigation-rule>
        <from-view-id>/Lophoc.jsp</from-view-id>
        <navigation-case>
            <from-outcome>insert</from-outcome>
            <to-view-id>/insert.jsp</to-view-id>
        </navigation-case>
        <navigation-case>
            <from-outcome>edit</from-outcome>
            <to-view-id>/edit.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
    <navigation-rule>
        <from-view-id>/insert.jsp</from-view-id>
        <navigation-case>
            <from-outcome>success</from-outcome>
            <to-view-id>/Lophoc.jsp</to-view-id>
        </navigation-case>
        <navigation-case>
            <from-outcome>error</from-outcome>
            <to-view-id>/error.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
    <navigation-rule>
        <from-view-id>/edit.jsp</from-view-id>
        <navigation-case>
            <from-outcome>success</from-outcome>
            <to-view-id>/Lophoc.jsp</to-view-id>
        </navigation-case>
        <navigation-case>
            <from-outcome>failed</from-outcome>
            <to-view-id>/error.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
</faces-config>

Cấu trúc chương trình sau khi hoàn tất

clip_image011

Bước 5: Thực thi chương trình và thưởng thức

Chúc thành công!

28 Responses to “JSF – Làm việc với CƠ SỞ DỮ LIỆU”

  1. sgboy17 said

    Chào anh, e nghĩ mãi không ra cách sắp xếp để thêm phần search book. Vấn đề chính là sau khi nhấn vào nút search, sẽ chuyển qua trang kết quả. Nhưng không thể truyền tham số search về cho server để thực thi. (thuộc tính value của chưa nhận được giá trị với sql query có where) .

  2. Đỉnh said

    Dear thầy!

    Thầy ơi cho em hỏi, khi em load trang viewAccount.jsp,nó báo là: ‘#{RegisterBean1.getAllAccount}’ Property ‘getAllAccount’ not found on type demo.RegisterBean1. ( cai getAllAccount cua em chinh la getAllLophoc cua thầy.)

  3. Đỉnh said

    Cai allLophoc la cai nào vậy thầy? nếu là getAllLophoc thì nó là 1 hàm, sao nam trong thuoc tinh value dc?

  4. Võ Văn Hải said

    Tữ động nó sẽ bỏ get, viết thường chữ đầu xuống. Đây là nguyên tắc cơ bản.

  5. Đỉnh said

    Yeah! cam on thay, giờ thi em đã hiểu.

  6. Quangtrieu said

    Hi Thay,
    Thay cho em hoi chut ah, e lam chuong trinh nhu vi du cua Thay ma khong chay duoc,
    Nguyen nhan la no khong mo duoc connec den DB
    Chuoi connec cua em la:
    Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
    Connection con = DriverManager.getConnection(“jdbc:sqlserver:192.168.100.221;databaseName=qlsv”, “sa”, “BacAdm1n”);
    Kinh mong thay chi dum!

  7. Võ Văn Hải said

    Bạn chắc là có mở cổng 1433 không đấy? Nếu bạn dùng SQL Studio 2005, 2008 thì mặc định TCP/IP port bị disable và bạn phải enable nó lên như sau:
    Mở “SQL Server Configuration Manager” lên sau đó chọn server instance bên trái, double mục TCP/IP bên phải, chọn enable=Yes, mở Tab “IP address” gõ port 1433 vào IPAll hoặc vào tất cả IP.

  8. Trần Công Vương said

    Em chào thầy ạ.Thầy có thể ví dụ thêm về phần view được không ạ?Bên cạnh 2 commanlink EDIT va DELETE có thêm 1 commanlink la VIEW để khi ta click VIEW thì nó sẽ qua form khác và trên form đó sẽ hiển thị lên tất cả thông tin của GiaoVienChuNhiem đó được không ạ?
    Mong thầy sẽ cho ví dụ sớm.Em cảm ơn thầy trước.

  9. Khoa said

    javax.faces.el.EvaluationException: java.lang.NullPointerException
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:619)
    Caused by: java.lang.NullPointerException
    at model.User.checkUser(User.java:85)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:191)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
    … 20 more

    Em chào thầy , mong này giúp em sửa lỗi này. Em làm giống vd của thầy.

    public String checkUser(){
    String sql =”SELECT * FROM users WHERE username=? AND password=?”;

    try{
    PreparedStatement prepare= getConnectPlane().prepareStatement(sql);
    prepare.setString(1, name);
    prepare.setString(2, password);
    ResultSet rs = prepare.executeQuery();
    while(rs.next()){
    return “index”;
    }
    }catch(SQLException e){e.printStackTrace();}
    return “login”;
    }

    public Connection getConnectPlane(){
    Connection con=null;
    try{
    Class.forName(“com.mysql.jdbc.Driver”);
    con =DriverManager.getConnection(“jdbc:mysql://localhost:3306/phplogin”,”root”,”root”);

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

  10. JSF said

    Em chào thầy, em đang làm JSF, để có thể làm được các ví dụ

    em cần phải có những bộ thư viện nòa ạ. MOng thầy cung cấp cho em.
    Em xin cảm ơn thầy.

  11. JSF said

    a4j:ajax event=”keyup” render=”out”

  12. Khoa said

    Em chào thầy.
    Chúng ta có thẻ truyền tham số vào phần value=”#{lophoc.allLophoc}” dược không ạ.

    Giả sử em chỉ muốn search các em lớp 6 or lớp 7 tùy vào mình
    public ArrayList getAllLopHoc(int lop_may)
    {
    tim kiếm trong database WHERE lop=lop_may
    }

    . SAu khi searcg xong , em muốn trình bày tên của 4 em trên 1 hàng được không ạ.
    Mong thầy giúp đỡ.
    Em cảm ơn thầy

  13. Khoa said

    Em chào thầy , thầy có thể cho em biết em cần những gói thư viện nào để có thể làm các vd liên quan tới các tag <a4j <rich
    Em muốn làm các vd giông trong trang này

    http://richfaces-showcase.appspot.com/richfaces/component-sample.jsf?demo=dataGrid&skin=blueSky

    Hiện tại em đang có thư viện JSF 2.1, JSTL1.1
    Mong thầy giúp đỡ

  14. Võ Văn Hải said

    2 thư viện chuẩn của JSF là jsf-api-….jar và jsf-impl-…jar, cái thẻ là thẻ của richfaces, bạn có thể tìm hiểu thêm ở bài này

  15. Võ Văn Hải said

    “Em chào thầy, em đang làm JSF, để có thể làm được các ví dụ
    em cần phải có những bộ thư viện nòa ạ. MOng thầy cung cấp cho em.
    Em xin cảm ơn thầy.”

    Vui lòng tìm kỹ trong blog này sẽ có cau trả lời

  16. Võ Văn Hải said

    Nó báo lỗi: Caused by: java.lang.NullPointerException
    at model.User.checkUser(User.java:85)
    Em coi thử chỗ dòng 85 của file User đó có đảm bảo connection đã thể hiện chưa?

  17. Khoa said

    Thầy có thể chỉ cho em cách chèn 1 trang jsf vào 1 trang khác được không.
    Ví dụ em tạo ra 1 trang menu, sau đó em chèn trang này cho các trang khác.
    Trong jsp em dùng jsp:include, còn trong jsf em không biết.

    Mong thầy giúp đỡ. Em chúc thầy mạnh khỏe.

  18. Do Dung said

    anh cho em hoi, trong cai vi du nay cua khi ta xoa duoc roi nhung lam the nao de loading lai du lieu o chinh cai trang do a

  19. Ken said

    chao thay! e thac mat la khi minh nhan nut delete thi lam seo biet truyen tham so id cho no a. thay co the giai thich ro hon dc hk a. mong thay giup do!

  20. Ken said

    Neu mh truyen tham 1 tham so cho nhu the nay:

    Thi ben Lophocbean mh lam seo de nhan tham so nay ha Thay? va lieu e viet nhu vay co dung chua?…Kinh mong thay giup dum e!

  21. Minh Phúc said

    Chào a, tôi có 2 trang. Trên trang 1 tôi hiển thị dữ liệu từ bean được thiết lập là SessionScoped, từ trang 1 chuyển qua trang 2 để thực hiện thao tác dữ liệu. Nhưng sau khi thay đổi dữ liệu thành công và database đã thay đổi nhưng khi quay về trang 1 dữ liệu vẫn ko thay đổi. Nếu dùng ViewScoped thì ko thể chuyển dữ liệu qua trang 2 được hoặc a có cách nào giúp chuyển dữ liệu qua trang 2 từ trang 1 ko (trang 2 và trang 1 dùng cùng 1 bean). A có cách nào giúp tôi giải quyết được vấn đề đó ko?

  22. Võ Văn Hải said

    Chào a, tôi có 2 trang. Trên trang 1 tôi hiển thị dữ liệu từ bean được thiết lập là SessionScoped, từ trang 1 chuyển qua trang 2 để thực hiện thao tác dữ liệu. Nhưng sau khi thay đổi dữ liệu thành công và database đã thay đổi nhưng khi quay về trang 1 dữ liệu vẫn ko thay đổi. Nếu dùng ViewScoped thì ko thể chuyển dữ liệu qua trang 2 được hoặc a có cách nào giúp chuyển dữ liệu qua trang 2 từ trang 1 ko (trang 2 và trang 1 dùng cùng 1 bean). A có cách nào giúp tôi giải quyết được vấn đề đó ko?

    Anh có thể send mail cho tôi demo của anh không? nói vầy thật khó trả lời.

  23. Thong Anh said

    Nói tóm tắt sạch sẽ là thế này :
    Trước tiên là tạo database, các bảng gồm các cột cần lưu thông tin
    tiếp theo tạo web application chọn framework java server face
    Tạo class java bình thường chức các thuộc tính tương ứng như các cột trong bảng, tạo getter setter, để tạo đối tượng sau này
    Tạo class massage driven bean, class này cũng có các thuộc tính tương ứng như class trên, và cả những phương thức xử lý
    Tại giao diện, nút nhấn commandButton với thuộc tính action cung cấp 1 chuổi, chuổi này sẽ là các case trong file face-config.xml, mục đích là điều hướng, thuộc tính actionLisener gọi tên class bean.tên phương thức xử lý, trong biểu thức #{}

  24. Nguyen Phu Vinh said

    Em chào thầy.

    Thầy có thể cho em xin bộ thư viện này được không ? . Em cảm ơn thầy

  25. tien said

    Thật sự thì em không biết cái alllophoc là cái hàm nào mong thầy chỉ dẫn
    <h:dataTable width="100%" border="1"
    var="lh" id="table"
    value="#{lophoc.allLophoc}"

  26. Võ Văn Hải said

    allLophoc là 1 phương thức trong backed bean

  27. xuananh said

    cho mình hỏi cái HtmlDataTable tạo làm sao, và 3 cái
    import javax.faces.component.UIComponent;
    import javax.faces.component.html.HtmlDataTable;
    import javax.faces.event.ActionEvent;
    nó cứ báo lỗi không tồn tại

  28. Nguyễn Văn Linh said

    Sao thầy không viết theo mô hình MVC-Two?Thầy có thể viết lại theo mô hình MVC dc không ạ?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: