最初に

jsfとは
・view (xhtml)
・controller (FacesServlet)
・model (bean)
のviewコンポーネントを中心にプログラムを記述します。
(例)ボタンを画面に記述し、ボタンをクリックしたときの記述をbeanクラスに直接記述。のようなイメージです。

下記にxhtmlファイルとbeanクラスの例を示します。



xhtmlファイルの記述例

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title>test</title>
</h:head>
<h:body>
<h:form id="form">
	<p:inputText value="#{userSearchBean.userName}"/>
	<p:commandButton value="検索" update="form" actionListener="#{userSearchBean.search()}" process="form"/>
</h:form>
</h:body>
</html>

【解説】
・pタグ
primefacesというコンポーネントを使用しています。
・hのformタグ
この中にbeanクラスに飛ばしたい値を記述します。
・inputText
valueはbeanクラスのプロパティと紐づけます。ボタンなど押してサーバー側に飛ばした場合自動的に紐づきます。
・commandButton
actionListenerで非同期で値をサーバー側に飛ばします。
updateは値を書き換える場所を記述します。(例えば検索結果を表示する場所など)
processは値を飛ばし元を記述します。

beanクラスファイル内の記述例

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;

import common.dto.UserDto;
import home.userSearch.dto.UserSearchDto;
import home.userSearch.service.UserSearchService;
import lombok.Getter;
import lombok.Setter;

@Named
@ViewScoped
public class UserSearchBean implements Serializable{

	private static final long serialVersionUID = 1L;

	@Getter
	@Setter
	private String userName;

	@Getter
	@Setter
	private List<UserDto> userList;

	@Inject
	private UserSearchService userSearchService;

        //画面表示の初期処理
	@PostConstruct
	public void init() {
		selectUser = new UserSearchDto();
	}

	//画面から直接呼び出されるメソッド
	public void search() {
		//検索結果を抽出する
		userList = userSearchService.searchUser(userName);
	}
	
}

【解説】
・@Named
このアノテーションで画面とbeanクラスがプロパティ、メソッドなど紐づきます。(画面からbeanクラスのメソッドを呼べるようになる)
・@ViewScoped
値の生存する長さを記述します。ViewScopedは画面が表示されている間、値を保持します。ほかにRequestScoped,SessionScopedなどがあります。
・@PostConstruct
初期処理を実装します。Scoped内のbeanクラスが呼び出される際の初期処理です。例えばViewScopedなら画面を最初に開いたときに呼ばれ、 RequestScoped なら画面側からリクエストが飛ぶたびに呼び出されます。
・search
画面から呼び出されるメソッドをbeanクラスに記述します。