Wednesday, June 30, 2010

Tuesday, June 15, 2010

Displaying spreadsheet page in blog site

Thursday, November 6, 2008

CRUD JSF RichFaces Spring Hibernate application

In this example we will be using Netbeans as an IDE and hibernate,spring & jsf framework which provides a very good platform for building enterprise application & the steps are as follows:

1) Create a table named “tbl_Departments” in mysql database

CREATE TABLE `tbl_departments` (

`DepartmentID` int(10) NOT NULL auto_increment,

`Title` varchar(256) NOT NULL,

`Description` varchar(256),

PRIMARY KEY (`DepartmentID`)
);


2) Create a “Department” entity class from the netbeansusing “New->Other->Persistence->Entity classes from Database”
package com.models;

@Entity
@Table(name = "tbl_departments")
public class Department implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "DepartmentID", nullable = false)
private Integer departmentID;
@Column(name = "Title", nullable = false)
private String title;
@Column(name = "Description")
private String description;
}
3) Create a DAO interface named “DepartmentDAO”




package com.dao;

import com.models.Department;
import java.util.List;
import org.springframework.transaction.annotation.Transactional;

public interface DepartmentDAO {
@Transactional(readOnly=false)
void deleteDepartment(Department dep);

@Transactional(readOnly=false)
List<Department> getDepartments();

@Transactional(readOnly=false)
void insertDepartment(Department dep);
@Transactional(readOnly=false)
void updateDepartment(Department dep);
@Transactional(readOnly=false)
Department getDepartmentByID(int departmentID);
}

4) Create a DAO implementation class named “DepartmentDAOImpl” extending the “HibernateDaoSupport”
class provided by the Spring
& implementing “DepartmentDAO” interface. Using the spring dao, we can minimize the code required for hibernate to interact with the database.



package com.dao.impl;

import com.dao.DepartmentDAO;
import com.models.Department;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class DepartmentDAOImpl extends HibernateDaoSupport implements DepartmentDAO {
public void deleteDepartment(Department dep) {
getHibernateTemplate().delete(dep);
}
public Department getDepartmentByID(int departmentID) {
return (Department) getHibernateTemplate().load(Department.class, departmentID);
}
public List<Department> getDepartments() {
return (List<Department>)
getHibernateTemplate().find("from Department d order by d.title ");
}
public void insertDepartment(final Department dep) {
getHibernateTemplate().save(dep);
}
public void updateDepartment(Department dep) {
getHibernateTemplate().update(dep);
}
}
5) Create spring bean configuration file named “beans.xml”



<beans>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="annotatedClasses">
<list>
<value>com.models.Department</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true
</prop>
<prop key="hibernate.transaction.factory_class">
org.hibernate.transaction.JDBCTransactionFactory
</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver
</prop>
<prop key="hibernate.connection.url">jdbc:mysql://localhost/shoppro
</prop>
<prop key="hibernate.connection.username">root
</prop>
<prop key="hibernate.connection.password">root
</prop>
</props>
</property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>

<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<bean
class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>

<!-- Define our Data Access beans -->
<bean id="departmentDao" class="com.dao.impl.DepartmentDAOImpl">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
</beans>
6) Now create a backing bean class named “ManageDepartments” for jsf



package com.managedbeans;

public class ManageDepartments {

private String departmentID;
private String title;
private String description;

public ManageDepartments() {
dc = Helper.getDepartmentDAO();
departments = dc.getDepartments();
}

private UIDataTable table;
private List<Department> departments;
private DepartmentDAO dc ;
private HtmlAjaxCommandLink updateLink;
private boolean editable = false; //editable mode means editable or not

public void editAction(ActionEvent e) {
Department dep = (Department) table.getRowData();

this.setDepartmentID(String.valueOf(dep.getDepartmentID()));
//save into table as attribute also for postback retrieval
table.getAttributes().put("depID",dep.getDepartmentID() );

this.setTitle(dep.getTitle());
this.setDescription(dep.getDescription());

this.setEditable(true);
this.updateLink.setRendered(true);
}

public void updateAction(ActionEvent e) {
Department dep = new Department();

dep.setDepartmentID( (Integer)table.getAttributes().get("depID"));
dep.setTitle(this.getTitle());
dep.setDescription(this.getDescription());

dc.updateDepartment(dep);
this.clearFields();
this.setEditable(false);
this.updateLink.setRendered(false);
this.departments = dc.getDepartments();
}

public void cancelAction(ActionEvent e){
this.clearFields();
this.setEditable(false);
this.updateLink.setRendered(false);
}

public void deleteAction(ActionEvent e) {
if (table.getRowData() != null) {
Department dep = (Department) table.getRowData();
dc.deleteDepartment(dep);
this.clearFields();
updateLink.setRendered(false);
this.departments = dc.getDepartments();
}
}

public void insertAction(ActionEvent e) {
Department dep = new Department();
dep.setDepartmentID(0);
dep.setTitle(this.getTitle());
dep.setDescription(this.getDescription());
dc.insertDepartment(dep);

this.clearFields();
this.departments = dc.getDepartments();
}

void clearFields() {
this.setTitle("");
this.setDescription("");
this.setDepartmentID("");
}

}

7) Create and configure “faces-config.xml” & “web.xml” for jsf & managed bean




<faces-config>
<managed-bean>
<managed-bean-name>ManageDepartments</managed-bean-name>
<managed-bean-class>com.managedbeans.ManageDepartments</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
</faces-config>
8) At last create a jsp page containing jsf & richfaces tags named “manageDepartments.jsp”



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

<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>

<html>
<body>
<f:view>
<h:form id="frm">
<rich:panel header="Deparments" style="width:450px">
<rich:dataTable binding="#{ManageDepartments.table}"
onRowMouseOver="this.style.backgroundColor='#B5CEFD'"
onRowMouseOut="this.style.backgroundColor='#{org.richfaces.SKIN.tableBackgroundColor}'"
onRowClick="this.style.backgroundColor='#F1F1F1'"
rows="10" width="100%" id="tbl" value="#{ManageDepartments.departments}" var="d">
<rich:column>
<f:facet name="header">
<h:outputText value="Title" />
</f:facet>
<h:outputText value="#{d.title}" />
</rich:column>
<rich:column width="230px">
<f:facet name="header">
<h:outputText value="Description" />
</f:facet>
<h:outputText value="#{d.description}" />
</rich:column>
<rich:column style="text-align:center">
<f:facet name="header">
<h:outputText value="Edit" />
</f:facet>
<a4j:commandLink reRender="pnl" actionListener="#{ManageDepartments.editAction}">
<h:graphicImage style="border:0"url="/images/Edit.gif" />
</a4j:commandLink>
</rich:column>
<rich:column style="text-align:center">
<f:facet name="header">
<h:outputText value="Delete" />
</f:facet>
<a4j:commandLink reRender="tbl,pnl"
actionListener
="#{ManageDepartments.deleteAction}"
onclick="if(confirm('Confirm delete?') == false ) return false;" >
<h:graphicImage style="border:0" url="/images/Delete.gif" />
</a4j:commandLink>
</rich:column>
<f:facet name="footer">
<rich:datascroller />
</f:facet>

</rich:dataTable>
</rich:panel>
<br>
<rich:panel header="Department" style="width:450px">
<h:panelGrid id="pnl" columns="2" width="100%" >

<h:outputText value="Department ID:" rendered="#{ManageDepartments.editable}" />
<h:outputText value="#{ManageDepartments.departmentID}"
rendered="#{ManageDepartments.editable}" />

<h:outputText value="Title:" />
<h:panelGroup>
<h:inputText id="title" value="#{ManageDepartments.title}" style="width:100%" />
<h:message style="color:red" for="title" />
</h:panelGroup>

<h:outputText value="Description:" />
<h:inputTextarea style="width:100%" value="#{ManageDepartments.description}" />

<a4j:commandLink value="Insert" reRender="tbl,pnl"
actionListener="#{ManageDepartments.insertAction}"
rendered="#{not ManageDepartments.editable}"/>
<a4j:commandLink value="Update" reRender="tbl,pnl"
actionListener
="#{ManageDepartments.updateAction}"
rendered="false" binding="#{ManageDepartments.updateLink}" />
<a4j:commandLink value="Cancel" reRender="pnl,tbl"
actionListener
="#{ManageDepartments.cancelAction}" />
</h:panelGrid>
</rich:panel>
</h:form>
</f:view>
</body>
</html>


Outputs
Case 1: displaying departments details in the dataTable

Case2: when the user selects a department for editing, its information appeared in the inputText & outputText with update & cancel buttons



Source Code with out libraries

Monday, October 20, 2008

Captcha using Asp.net

1)Create a class Captcha which handles the captcha logic like creating dynamic image containing code & generating dynamic codes

using System;

using System.Data;

using System.Configuration;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

using System.Drawing;

using System.Drawing.Imaging;

public class Captcha

{

private System.Drawing.Image image;//generated image

private int width, height; //width,height of the image to be generated

private string text = ""; //code

private Random random;//for random number generation

public Captcha(int w, int h, string text)

{

width = w;

height = h;

random = new Random();

this.text = text;

this.GenerateImage();

}

public System.Drawing.Image CapImage

{

get

{

return image;

}

}

// returns the Randomly generated String

public static string GenerateRandomCode()

{

int no = 0;

string no1 = "";

Random r = new Random();

no = r.Next(10);

no = no * 10 + r.Next(10);

no = no * 10 + r.Next(10);

char c = (char)r.Next(65, 90);

char c1 = (char)r.Next(65, 90);

no = no * 10 + r.Next(10);

//Convert all number into String

no1 = no.ToString();

//Insert the two character into the specified position

no1 = no1.Insert(0, c.ToString());

no1 = no1.Insert(2, c1.ToString());

return no1.ToString();

}

private void GenerateImage()

{

// Create a bitmap image.

Bitmap bitmap = new Bitmap(this.width, this.height);

// Create a graphics object for drawing.

Graphics g = Graphics.FromImage(bitmap);

//Create Rect

Rectangle rect = new Rectangle(0, 0, this.width - 1, this.height - 1);

//Create Font

Font font = new Font("Arial", width / 8, FontStyle.Italic);

// Fill in the background.

g.FillRectangle(Brushes.SeaShell, rect);

// Set up the text format.

StringFormat format = new StringFormat();

format.Alignment = StringAlignment.Center;

format.LineAlignment = StringAlignment.Center;

//Rotation angle

g.RotateTransform(5);

//Draw the Text

g.DrawString(this.text, font, Brushes.Sienna, rect, format);

// Add some random noise.

int m = Math.Max(rect.Width, rect.Height);

for (int i = 0; i < (int)(rect.Width * rect.Height / 20); i++)

{

int x = this.random.Next(rect.Width);

int y = this.random.Next(rect.Height);

int w = this.random.Next(m / 50);

int h = this.random.Next(m / 50);

g.FillEllipse(Brushes.Gray, x, y, w, h);

}

// Clean up.

g.Dispose();

// Set the image.

this.image = bitmap;

}

}

2) Create an asp.net page (or instead of using page, you can also use HttpHandler) to output the dynamic image containing code. This page doesn’t required any interface related tags but only contains code in the Page_Load event handler & named it CaptchaGenerator.aspx

protected void Page_Load(object sender, EventArgs e)

{

//create captcha using width,height & code from the Session

Captcha captcha = new Captcha(160, 65, Session["Code"].ToString());

System.Drawing.Image img = captcha.CapImage;

//set the response type to the browser

Response.ContentType = "image/jpeg";

//send the image to th browser

img.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

//end the response

Response.End();

}

3) Create a Register page displaying captcha & other registration information:

Design Time Display








Run Time Display












protected void Page_Load(object sender, EventArgs e)

{

if (Session["Code"] == null)

Session["Code"] = Captcha.GenerateRandomCode();

/// if (IsValid)

// Response.Write("Verified.");

}

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)

{

if (Session["Code"].ToString().Equals(txtCode.Text))

{

args.IsValid = true;

}

else

args.IsValid = false;

}

protected void btnRegister_Click(object sender, EventArgs e)

{

if (IsValid)

{

Response.Write("Verified.");

}

}

Download Source Code here

Saturday, October 11, 2008

Hello world Richfaces/ajax4jsf application

ajax4jsf/RichFaces

- is an open source framework that adds Ajax capability into existing JSF applications without resorting to JavaScript.


Step 1: (add jar files & make changes into the web.xml file)

...
    <context-param>
<param-name>org.richfaces.SKINparam-name>
        <param-value>blueSkyparam-value>
context-param>
<filter>
<display-name>RichFaces Filterdisplay-name>
<filter-name>richfacesfilter-name>
<filter-class>org.ajax4jsf.Filterfilter-class>

    <filter-mapping>
<filter-name>richfacesfilter-name>
<servlet-name>Faces Servletservlet-name>
<dispatcher>REQUESTdispatcher>
<dispatcher>FORWARDdispatcher>
<dispatcher>INCLUDEdispatcher>
>

Step 2:

class Bean {

private int first;

private int second;

private int result;

public String action() {

result = first+second;

return null;
}

}


Step 3:

index.jsp

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

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

<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>

<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>

<h:form>

<rich:panel header="Calculate Sum" style="width:200px" > <!--allows to place the page elements in rectangle
panel that can be skinned
-->
First: <h:inputText
value="#{Bean.first}" /> <br>

Second: <h:inputText
value="#{Bean.second}" /> <br>

<%--reRender contains
the element id(or multiple ids) which will be updated after
the ajax response --%> <a4j:commandButton value="Add" action="#{Bean.action}"
reRender="result" />

Result: <h:inputText

value="#{Bean.result}" id="result" /> </rich:panel>
</h:form>


Source Code