JavaBeat

  • Home
  • Java
    • Java 7
    • Java 8
    • Java EE
    • Servlets
  • Spring Framework
    • Spring Tutorials
    • Spring 4 Tutorials
    • Spring Boot
  • JSF Tutorials
  • Most Popular
    • Binary Search Tree Traversal
    • Spring Batch Tutorial
    • AngularJS + Spring MVC
    • Spring Data JPA Tutorial
    • Packaging and Deploying Node.js
  • About Us
    • Join Us (JBC)
  • Privacy
  • Contact Us

PrimeFaces AutoComplete + POJO Example

April 13, 2014 by Amr Mohammed Leave a Comment

In my previous post, I have explained how to use Primefaces AutoComplete component in conjunction with completeMethod. But what if the user has decided to use a Plain Old Java Object (POJO) instead of using simple strings object as most of time that case it happens.

Using a domain objects within autoComplete isn’t trivial as it contains some additional component for making it works. At this tutorial you are going to develop a simple Primefaces application that adhered to using POJO for the autocomplete functionality.

  • Read : PrimeFaces Tutorials

1. The View

index.xhtml

[code lang=”xml”]
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<f:view>
<h:form prependId="false">
<h1>JavaBeat Primefaces Example</h1>
<h2>Primefaces – AutoComplete + completeMethod + Pojo</h2>
<h:outputText value="Enter name of the player you wish to see statistics for :"/>
#{‘ ‘}
<p:autoComplete value="#{autoComplete.player}"
completeMethod="#{autoComplete.complete}"
var="player"
itemValue="#{player.playerId}"
itemLabel="#{player.playerName}"></p:autoComplete>
</h:form>
</f:view>
</html>
[/code]

2. Managed Bean

AutoComplete

[code lang=”java”]
package net.javabeat.primefaces;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;

import net.javabeat.primefaces.data.Player;
import net.javabeat.primefaces.util.PlayerDataSource;

@ManagedBean
@SessionScoped
public class AutoComplete {
@ManagedProperty("#{playerDataSource}")
private PlayerDataSource ds;

private Player player;

public AutoComplete (){

}

public List<Player> complete(String query){
// Assumed Datasource
return ds.queryByName(query);
}

public Player getPlayer() {
return player;
}

public void setPlayer(Player player) {
this.player = player;
}

public PlayerDataSource getDs() {
return ds;
}

public void setDs(PlayerDataSource ds) {
this.ds = ds;
}
}
[/code]

3. Assumed DataSource

PlayerDataSource.java

[code lang=”java”]
package net.javabeat.primefaces.util;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import net.javabeat.primefaces.data.Player;
@ManagedBean
@SessionScoped
public class PlayerDataSource {
public List<Player> players = new ArrayList<Player>();

public PlayerDataSource(){
// Assumed Player
Player player = new Player();
player.setPlayerId("1");
player.setPlayerName("Anderias Muller");
player.setPlayerPosition("CF");
player.setPlayerAge("24");

// Add Player
players.add(player);

// Assumed Player
player = new Player();
player.setPlayerId("2");
player.setPlayerName("Olaf Thon");
player.setPlayerPosition("CM");
player.setPlayerAge("29");

// Add Player
players.add(player);

// Assumed Player
player = new Player();
player.setPlayerId("3");
player.setPlayerName("Oliver Khan");
player.setPlayerPosition("GK");
player.setPlayerAge("31");

// Add Player
players.add(player);

}

public List<Player> getPlayers() {
return players;
}

public void setPlayers(List<Player> players) {
this.players = players;
}

public List<Player> queryByName(String name){
// Assumed search using the startsWith
List<Player> queried = new ArrayList<Player>();
for(Player player: this.players){
if(player.getPlayerName().startsWith(name)){
queried.add(player);
}
}
return queried;
}
}
[/code]

4. The Associated Converter

PlayerConverter.java

[code lang=”java”]
package net.javabeat.primefaces.converter;

import javax.faces.bean.ManagedProperty;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

import net.javabeat.primefaces.data.Player;
import net.javabeat.primefaces.util.PlayerDataSource;

@FacesConverter
public class PlayerConverter implements Converter{
@ManagedProperty("#{playerDataSource}")
private PlayerDataSource ds;

public PlayerDataSource getDs() {
return ds;
}

public void setDs(PlayerDataSource ds) {
this.ds = ds;
}

@Override
public Object getAsObject(FacesContext context, UIComponent component,String value) {
for(Player p : ds.getPlayers()){
if(p.getPlayerId().equals(value)){
return p;
}
}
return null;
}

@Override
public String getAsString(FacesContext context, UIComponent component,Object value) {
if(value instanceof Player){
Player player = (Player)value;
return player.getPlayerId();
}
return "";
}
}
[/code]

5. The POJO

Player.java

[code lang=”java”]
package net.javabeat.primefaces.data;

public class Player {
private String playerId;
private String playerName;
private String playerPosition;
private String playerAge;

public String getPlayerId() {
return playerId;
}
public void setPlayerId(String playerId) {
this.playerId = playerId;
}
public String getPlayerName() {
return playerName;
}
public void setPlayerName(String playerName) {
this.playerName = playerName;
}
public String getPlayerPosition() {
return playerPosition;
}
public void setPlayerPosition(String playerPosition) {
this.playerPosition = playerPosition;
}
public String getPlayerAge() {
return playerAge;
}
public void setPlayerAge(String playerAge) {
this.playerAge = playerAge;
}

public boolean equals(Object obj){
if(obj instanceof Player){
Player player = (Player)obj;
if(this.playerId.equals(player.getPlayerId())){
return true;
}
}
return false;
}

public int hashCode(){
return this.playerId.hashCode();
}
}
[/code]

6. Primefaces AutoComplete + completeMethod + POJO Demo

The below snapshot shows you using of autoComplete in conjunction with Pojo.

Primefaces AutoComplete + completeMethod + POJO Demo

[wpdm_file id=65]

Filed Under: JSF Tagged With: PrimeFaces

About Amr Mohammed

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Follow Us

  • Facebook
  • Pinterest

As a participant in the Amazon Services LLC Associates Program, this site may earn from qualifying purchases. We may also earn commissions on purchases from other retail websites.

JavaBeat

FEATURED TUTORIALS

Answered: Using Java to Convert Int to String

What is new in Java 6.0 Collections API?

The Java 6.0 Compiler API

Copyright © by JavaBeat · All rights reserved