svar
jeg har lavet et lille eksempel
denne klasse er en backing bean som håndteres af jsf, men det er bare en ganske almindelig bean. den har en atribut som kunne svare til en værdi i et text field og så har den en metode som kan arbejde med den og som retunerer en string afhængig af hvad der sker i metoden.
public class SomeBean {
private String someString;
public void setSomeString(String s){this.someString = s;}
public String someAction(){
try{
// do something
catch(Exception ex)
{return "retry";}
return "success";
}
}
i jsf konfigurationen er beanen sat med session scope og den kan nu bruges fra vores jsp side.
der er også lavet en navigerings regel der siger at hvis vi står på somepage.jsp og får retuneret success fra vores managed bean bliver vi sent til anotherpage.jsp
<faces-config>
<managed-bean>
<description>
Backing bean that contains some informaiton.
</description>
<managed-bean-name>someBean</managed-bean-name>
<managed-bean-class>package.SomeBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/somepage.jsp</from-view-id>
<navigation-case>
<description>
</description>
<from-outcome>success</from-outcome>
<to-view-id>/anotherpage.jsp</to-view-id>
</navigation-case>
<navigation-case>
<description>
</description>
<from-outcome>retry</from-outcome>
<to-view-id>/somepage.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
til sidst har vi vores side som nu intet scriptlet kode har, ingen request.getParameter osv. overførelsen af atributter sker helt automatisk.
vi får også valideret at den bliver sat med required og får vedhæftet en fejlmeddelse på komponentet hvis den ikke er sat.
<%@ taglib prefix="f" uri="
http://java.sun.com/jsf/core" %>
<%@ taglib prefix="h" uri="
http://java.sun.com/jsf/html" %>
<html>
<head>
<title>Simple jsp page</title>
</head>
<body>
<f:view>
<h:form id="someForm">
<table>
<tr>
<td align="right">
<h:outputText value="SomeValue"/>
</td>
<td align="left">
<h:inputText value="#{someBean.someString}" id="username" required="true"/>
<h:message styleClass="errorMessage" for="username"/>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<h:commandButton value="Save" action="#{someBean.someAction}"/>
</td>
</tr>
</table>
</h:form>
</f:view>
</body>
</html>
til sidst specificeret vi i vores web.xml at vi skal bruge jsf med
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Det er egentligt alt det kræver og så har man en klar seperation af html og logik.
at lære at bruge komponenter, validatorer, convertere osv er ikke så svært det er først når man skal lave egne eller forstå jsfs lifecycle det bliver lidt svært men så kan jeg anbefale at læse OReillys JavaServer Faces bog.
med værktøjer som sun studio creator eller borland jbuilder 2005 så kan man også lave drag and drop ala ASP.NET hvis man skulle have lyst til det.