JavaBeans

**JavaBeans** es componentes de programmatura scribite in le linguage de programmation Java. Secundo le specification de Sun Microsystems le JavaBeans es "componentes reusabile de programmatura le quales pote esser manipulate visualmente con le adjuta de un utensile de disveloppamento". Un *bean* anque pote esser definite como un classe Java qui expone proprietates, sequente un convention de nomenclatura simple pro le methodos *accessores* e *mutatores*. Practicamente illos es classes scribite de accordo con un convention in particular. Illos es usate pro encapsular multe objectos in un unic objecto (o *bean*), assi illos pote esser transmittite como un unic objecto in vice de varie objectos individual. Le JavaBean es un objecto de Java qui es serialisabile, possede un constructor sin argumentos e permitte accesso a su proprietates a transverso de methodos *accessores* e *mutatores*.

In despecto del similaritate in le nomines, il debe evitar confunder le JavaBeans con le *Enterprise JavaBeans*, o EJBs, qui es componentes usate in servitores e es parte del platteforma Java EE.

Le origine del termino (significante o non) veni del synomino del parola *java*, usate popularmente in le Statos Unite de America con le signification de caffe, e *beans* (in anglese "granos"), faciente un analogia que le caffe es producite de granos qui encapsula su sapor.

## Conventiones usate in le JavaBeans
Pro esser considerate como un JavaBean, un classe require sequer alcun conventiones de nomenclatura de methodos, constructores e comportamento. 

Le conventiones defini que le classe debe:
* implementar le interfacie `java.io.Serializable` (qui rende possibile le persistentia e restauration del stato del objecto del classe);
* posseder un constructor sin argumentos;
* haber su proprietates accessibile a transverso de methodos *get* e *set* (*accessores* e *mutatores*), sequente un convention de nomenclatura;
* pote continer qualcunque methodo de tractamento de eventos.

Como iste requirimentos es exprimite in conventiones in vice de esser garantite a transverso de un interfacie, alcun programmatores vide le JavaBeans como Plain Old Java Objects qui seque certe conventiones de nomenclatura. Totevia, iste vision es decipiente pro JavaBeans qui suppota le tractamento de eventos, a causa que le conventiones de nomenclatura in iste caso es plus complexe e demanda le uso de classes como base e le implementation de interfacies.

Le *bean* es usate per programmatores in jsp o seja (Java Server Page) ubi a transverso de illos on implementa constructores de classes e methodos.

## Avantages e disavantages del uso del JavaBeans
### Avantages
* Le proprietates, eventos e methodos de un *bean* le quales es exponite a altere applicationes pote esser controlate.
* Un *bean* pote registrar e reciper eventos venite de altere objectos e generar eventos qui essera inviate a altere objectos.
* JavaBeans pote esser configurate con le adjuta de programmaturas auxiliar.
* Le configurationes de un *bean* pote esser salvate in alcun medio de immaganizage persistente.

### Disavantages
* Un classe con un constructor sin argumentos pote crear un instantia continente un stato invalide. Si le disveloppator manualmente (non alcun typo de *framework* automaticamente) crea un instantia de tal classe, le disveloppator pote non perciper que le instantia del classe ha essite create de forma improprie. Le compilator non pote deteger tal problema, e mesmo si il es possibile documentar lo, nihil garanti que altere disveloppatores verificara le documentation.
* Le necessitate de crear methodos *accessores* e *mutatores* pro cata proprietate. Illo pote generar codice duplicate.

## API JavaBeans
Le functionalitate del JavaBeans es providite per un serie de classes e interfacies in le pacchetto java.beans

## Exemplo
**<u><code>Persona.java</code></u>**:

```java
public class Persona implements java.io.Serializable 
{
	private String nomine;
	private String etate;
    
	public String getNomine() 
	{
		return nomine;
	}

	public void setNomine(String nomine) 
	{
		this.nomine = nomine;
	} 
    
	public String getEtate() 
	{
		return etate;
	}
	
	public void setEtate(String etate) 
	{
		this.etate = etate;
	}
    
	/*constructor attribue vacue al attributos
	a causa que valores nulle es monstrate in le pagina */
	public Persona() 
	{
		this.etate="";
		this.nomine="";
	}
}
```


**<u><code>persona.jsp</code></u>**:

```html4strict
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>JavaBean Persona</title>
</head>
<body>
	<jsp:useBean id="persona" class="pacchetto.Persona"></jsp:useBean>
	<jsp:setProperty property="*" name="persona"/>
	
	<form action="persona.jsp" method="post">
		Nomine: <input type="text" name="nomine"><br />
		Etate<input type="text" name="etate" size="5">
		<input type="submit" value="Inviar datos">
		<p>
		Nomine: <%=persona.getNomine() %></p>
		Etate: <%=persona.getEtate() %>
	</form>
</body>
</html>
```