Quên mật khẩu là việc chẳng ai mong muốn nhưng xảy ra khá thường xuyên. Đối với người dùng bình thường thì có thể thiết lập lại mật khẩu một cách dễ dàng nhưng với tài khoản quản trị thì đó là một lỗi kinh hoàng và ngớ ngẩn nhất. Chính vì vậy, bài này sẽ hướng dẫn một cách thiết lập lại mật khẩu của tài khoản test@liferay.com phòng trường hợp bạn quên.
Liferay, Programming, Java, Algorithms, Portal, Cổng thông tin, Lập trình, Thuật toán, Liferay Vietnam, Liferay Việt Nam
Một kỹ thuật sử dụng mảng
Trong các ứng dụng thông thường thì rất ít khi sử dụng mảng mà thay vào đó chủ yếu là sử dụng danh sách. Tuy nhiên, trong trường hợp các phần tử là hữu hạn thì dùng mảng là tốt nhất. Trong bài viết này, mình viết là một kỹ thuật sử dụng mảng trong thuật toán đơn giản, sẽ có ích với người mới làm quen với kỹ thuật lập trình.
Liferay 6.2: Custom Dynamic query with array parameters
Liferay Service Builder (LSB) is a great tool for Liferay developers. We use the methods of the services which is generated by LSB in the most of the case. But, you can not work with multi-table. There was a solution in this case (click here to see). This article is a good guide but you cannot execute a query with array parameters. So, executing a custom dynamic query with array parameters is the purpose of this post.
Liferay 6.2: Ví dụ về AJAX trong Liferay
Khỏi phải bàn đến lợi ích của ajax trong trong các ứng dụng web. Với nhiều lợi ích như thế nên ajax được hỗ trợ rất tốt trong Liferay và việc sử dụng nó cũng hết sức đơn giản. Trong bài viết này, mình sẽ làm một ví dụ đơn giản minh họa việc sử dụng ajax giúp cho lập trình viên có thể tạo ra những ứng dụng web độc đáo nhất.
Liferay 6.2: Các vấn đề liên quan đến đa ngôn ngữ trong Liferay
Multi-language |
Trong một thế giới rộng lớp, nếu muốn giới thiệu tới tất cả mọi người ứng dụng của mình bạn phải thể hiện nó với nhiều ngôn ngữ khác nhau. May mắn thay, Liferay đã hỗ trợ tính năng này và cung cấp những cách dễ dàng nhất để làm điều đó. Mình sẽ giới thiệu làm thế nào để sử dụng đa ngôn ngữ trong một portlet. Hãy bắt đầu nào.
Liferay 6.2: Hook và tự viết taglib
English version
Hôm nay, mình sẽ thảo luận về việc làm thế nào để viết một jsp taglib. Tại sao cần phải tự viết taglib riêng? Vì các tag này được sử dụng lại trong nhiều dự án khác nhau và các taglib trong các thư viện có sẵn không đáp ứng được nhu cầu của bạn. Ví dụ: tạo một taglib để thể hiện thông tin của một sản phẩm trong các dự án thương mại điện tử hoặc thể hiện thông tin của một quyển sách trong cửa hàng sách online,...
Trong bài này, chúng ta sẽ tạo ra một taglib thể hiện thông tin của một cuốn sách, các thông tin gồm: tiêu đề (title), phiên bản (edition version), số ISBN (ISBN), các tác giả (authors), hình bìa (cover image), tổng số trang (number of pages), nhà xuất bản (publisher),...
Liferay 6.2: Hook and Taglib
Vietnam version
Today, I am going to discuss how to create custom JSP tag-libs. Because custom JSP tags are reused in many projects, creating custom JSP tags is always necessary. For examples: creating a tag-lib to show a product information in e-commerce projects, book information in a bookstore.
In this post, we are going to create a tag-lib which shows the information of a book. The book's information includes title, edition version, ISBN, authors, cover image, the number of pages, publisher,...
SQL: Một trường hợp của lệnh UPDATE trong SQL
Postgresql: Execute some simple commands
Postgresql logo |
In this post, I will show you how to execute a SQL file from the terminal screen.
Liferay 6.2: Multi-language problems
Multi-language |
In the wide world, if you want to introduce your application, your program have to multi-language. Fortunately, Liferay framework supported this feature and provided easiest ways to do. I will introduce how to using multi-language in a portlet. Let's go.
Java: Sử dụng thư viện POI để đọc và ghi dữ liệu với excel
English version
Ngay khi đọc tiêu đề bài viết, bạn cũng dễ dàng đoán được ý đồ của bài này rồi đúng không? Thao tác nhập và xuất dữ liệu từ file excel là một thao tác rất thường xuyên trong công việc của chúng ta. Vậy, làm thế nào chúng ta có thể nhập và xuất những dữ liệu mà ta mong muốn. Bài này sẽ giúp bạn trả lời câu hỏi trên.
Liferay 6.2: How to use liferay-ui:form-navigator tag
Java: Singleton Pattern và kết nối với cơ sở dữ liệu trong các ứng dụng Java
Singleton pattern |
Liferay: So sánh giữa Liferay MVC va Spring MVC
Liferay MVC vs Spring MVC |
Trước khi thảo luận chi tiết hơn, bạn có thể tham khảo ở các blog sau Liferay MVC Portlet và Spring MVC Portlet để hiểu các khái niệm cơ bản. Để hiểu được sự giống và khác nhau giữa Liferay MVC và Spring MVC, ta sẽ đi so sánh các đặc trưng giữa hai framework này.
Liferay: Tải tệp tin (upload file) trong portlet
Liferay 6.2: Upload file in portlet
Vietnamese version
The uploading file is an activity frequently. You can use this activity to upload document files (for examples: doc, docx, pdf, png...) or data files (for examples: csv, xls, xlsx, odt,..). There are many ways to upload a file, I will show you my way in this post.
Alogrithm: Sắp xếp vun đống (heap sort)
Thực hiện vun đống |
Rất may mắn có một người bạn giúp ta làm một việc như sau: người bạn đó sẽ sắp xếp số đồ vật của chúng ta thành một đống mà phần tử ở trên bao giờ cũng nhẹ hơn phần tử ở dưới. Như vậy, ta lấy được đồ vật nhỏ nhất và bỏ ra ngoài. Người bạn lại tiếp tục sắp lại đống đồ vật trên và ta lại chọn phần tử ở trên cao nhất - là phần tử nhẹ nhất trong đống nhưng nhẹ thứ hai trong danh sách các đồ vật. Cứ thế đến cuối cùng thì các phần tử được ta nhặt ra từ đống sẽ được sắp xếp.
Ngay lập tức ta thấy có một câu hỏi đặt ra là việc xếp lại cái đống đồ vật để cho ta chọn đồ vật nhẹ nhất có phức tạp và khó khăn hay không? Rất may nó lại khá đơn giản, post này sẽ giải thích kỹ hơn cho bạn.
Algorithm: Thuật toán sắp xếp nhanh (quick sort)
Hình động cảu thuật toán sắp xếp nhanh
|
Algorithm: Thuật toán sắp xếp chèn (insertion sort)
Sắp xếp chèn (insertion sort) |
Liferay 6.2: Kết hợp search container và cơ sở dữ liệu
Trong hai post trước đây (service builder và search container) cho phép chúng ta tương tác với dữ liệu và tương tác với giao diện. Trong post này mình sẽ kết hợp cả hai công việc riêng rẽ ở hai post trên vào thành một. Có nghĩa là ứng dụng của chúng ta sẽ lấy dữ liệu từ cơ sở dữ liệu hiển thị lên màn hình nhờ search container và chúng ta có thể dùng các tham số của search container để lọc các bản ghi phù hợp. Bây giờ các ứng dụng ta viết ra sát với thực tế rồi đấy.
Algorithm: Thuật toán sắp xếp chọn (selection sort)
Hình động sắp xếp chọn
|
Algorithm: Thuật toán sắp xếp nổi bọt (bubble sort)
Minh họa |
Python: Sắp xếp (sorting)
Sắp xếp |
Liferay 6.2: Thao tác với cơ sở dữ liệu
Trong các hướng dẫn trước đây, chúng ta đã làm quen với việc xây dựng các ứng dụng (portlet) đơn giản. Tuy nhiên, chúng chỉ là các ví dụ mà thôi, để cho gần hơn với các ứng dụng trong thực tế, mình viết post này trình bày về các thao tác với cơ sở dữ liệu. Liferay cung cấp một công cụ cực kỳ mạnh mẽ và hiệu quả đó là Servvice Builder. Công cụ này sẽ giúp bản triển khai một ứng dụng cực kỳ nhanh chóng.
Python: Tìm giá trị của biểu thức Taylor.
Định lí Taylor cho ta một đa thức xấp xỉ một hàm khả vi tại một điểm cho trước (gọi là đa thức Taylor của hàm đó) có hệ số chỉ phụ thuộc vào các giá trị của đạo hàm tại điểm đó. Định lí còn cho ta một đánh giá chính xác sai số của xấp x.
Liferay 6.2: Tìm kiếm và liệt kê (Search Container)
Trong các ứng dụng thông thường, việc liệt kê tất cả các phần tử (bản ghi) là một việc rất hay gặp. Trong trường hợp, nếu số lượng bản ghi nhiều và tràn hết màn hình thì ta sẽ có nhu cầu phân trang.
Liferay có tiện ích search container rất hữu ích cho chúng ta khi thực hiện công việc như trên. Trong bài này, mình sẽ giới thiệu chi tiết cách sử dụng search container.
Liferay 6.2: Làm việc với nhiều render
Như đã nói ở bài trước, nếu trong một portlet có nhiều thao tác xử lý dữ liệu thì ta sẽ tạo ra các action tương ứng để giải quyết công việc một cách độc lập. Việc này sẽ giúp chúng ta tách biệt các công việc khác nhau đồng thời sẽ dễ hiểu cho người khác đọc code của chúng ta và dễ dàng để bảo trì.
Như đã hứa ở bài trước, bài này chúng ta sẽ bàn đến vấn đề trả lại nhiều view khác nhau. Công việc này chắc chắn là thường xuyên gặp. Chẳng hạn bạn đang ở giao diện view, bạn có thể chuyển sang giao diện edit. Edit xong bạn có thể chuyển sang giao diện xem chi tiết chẳng hạn. Nói tóm lại, bài này sẽ giúp bạn chuyển sang các view đúng với kịch bản của bạn sau khi thực hiện các action.
Liferay 6.2: Xử lý nhiều action
Trong bài trước, chúng ta có hai file view.jsp và edit.jsp. Mặc định, khi mở portlet ra thì sẽ hiển thị nội dung của file view.jsp. Sau đó, ta nhấn vào liên kết để mở file edit.jsp. Trong file edit.jsp ta sẽ nhập vào tên và truyền xuống controller và controller xử lý dữ liệu rồi trả lại view.jps.
Ta thấy, ở đây có hai thao tác, i) mở file edit.jsp thao tác này được gọi là render và ii) chuyển dữ liệu từ file edit.jsp xuống controller ta gọi là action. Câu hỏi đặt ra, nếu như chúng ta muốn có nhiều thao tác gửi dữ liệu xuống controller thì phải làm thế nào?Bài này sẽ giải đáp thắc mắc trên.
Python: Kiểu dữ liệu chuỗi
Python: Một số ví dụ về hàm
Hàm |
Khái niệm hàm trong ngôn ngữ lập trình thì mình không phải giới thiệu lại. Bạn chỉ cần hiểu đơn giản hàm là một hộp đen thực hiện một công việc nào đó. Với đầu vào như thế nào thì sẽ được đầu ra tương ứng. Ví dụ, đầu vào của hộp đen số nguyên tố là 11 sẽ có kết quả là True, còn đầu vào là 12 sẽ có đầu ra là False. Vậy, chúng ta sẽ đi tìm hiểu cách chế tạo hộp đen bằng Python nhé.
Liferay 6.2: Gửi và nhận dữ liệu trong portlet
Trong bài trước, chúng ta đã tạo ra được một portlet có tên là FirstApp, portlet này đã hiển thị một lời chào lên màn hình. Câu chuyện đặt ra, nếu mình muốn cho phép người khác hiển thị dòng chữ chào mừng đấy thì ta phải làm thế nào?
Rất đơn giản thôi, ta cho người dùng nhập vào nội dung (tên người chẳng hạn) và người dụng nhấn vào nút Gửi , lúc này, controller sẽ trả lại dòng chữ chào mừng mà ta mong muốn.
Tự học Python: Một vài chương trình đơn giản.
Ở bài số 1, chúng ta đã cài đặt môi trường Python, môi trường lập trình và chạy chương trình đầu tiên. Bây giờ mình sẽ viết một số chương trình ví dụ. Đơn giản nhất là chương trình kiểm tra một số có phải là số nguyên tố, hoàn hảo và chính phương hay không (đây là các bài toán cơ bản và đơn giản nhất có thể.
Tự học Python: Cài đặt và viết chương trình đầu tiên
Mình không phải quảng bá nhiều về Python, chỉ biết rằng Python hiện đang ở vị trí thứ 5 (tham khảo) trong bảng xếp hạng và có chiều hướng tăng. Đồng thời, cộng đồng Python cũng kêu gào rằng Python code Python rất ngắn gọn và phải gõ phím rất ít khi viết cùng một chương trình ở các ngôn ngữ khác. Chính vì thế, có thể sẽ rất phù hợp với những người lười đấy (theo nghĩa đen luôn). Đề xem có đúng như lời cộng đồng Python nói không, thì chẳng có cách nào khác chúng ta đi tự học và cố gắng học trong 21 ngày nhé (dài quá không?).
Liferay 6.2: Tạo Portlet đầu tiên
Liferay 6.2: Các thành phần cơ bản của Liferay (P2)
Ở phần trước, chúng ta đã tìm hiểu các thành phần được sử dụng để dựng trang (company, site, page, portlet, ...). Phần này chúng ta sẽ đi tìm hiểu về phần quản lý người dùng trong Liferay gồm có: người dùng, nhóm người dùng, tổ chức, vai trò và quyền,...
Liferay 6.2: Các thành phần cơ bản của Liferay
Sau khi đã cài đặt và cấu hình thành công Liferay trên máy tính các nhân. Lúc này, chúng ta sẽ đi tìm hiểu các thành phần trong Liferay. Mình sẽ chia thành hai phần và chúng ta sẽ đi tìm hiểu từng phần một: i) các thành phần liên quan đến dựng trang (company, site, page, portlet, ...), ii) thành phần người dùng (user, group user, organization,...). Nào, cùng bắt đầu nhé:
Liferay 6.2: Cài đặt và cấu hình Liferay
Ở hướng dẫn trước, mình đã nêu ra các phần mềm chính (portal, sdk và ide). Trong phần này, mình sẽ hướng dẫn cụ thể cài đặt môi trường máy chủ và môi trường lập trình (bài sau nữa).
Bắt đầu với Liferay
chức và doanh nghiệp có nhu cầu phát triển hệ thống thông tin trên môi trường mạng nhằm thực hiện các giao dịch trực tuyến sử dụng Intranet/Internet như một công cụ thiết yêu trong các hoạt động, cung cấp thông tin, giao tiếp, quản lý, điều hành, trao đổi và cộng tác.
Đăng ký:
Bài đăng (Atom)