Coger Bean de la sesión
Para utilizar una clase Bean desde otro Bean solo hay que escribir:
BeanType pp = (VocabularyBean) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("NOMBRE DEL BEAN");
Obtener datos de una Tabla desde un Bean
< h:dataTable var="item" value="#{MyBean.items}"
binding="#{MyBean.dataTable}" >
< h:column>
< h:outputText styleClass="output" value="#{item.productName}"/>
< /h:column>
< h:column>
< h:commandButton value="remove" action="#{MyBean.remove}" />
< /h:column>
< /h:dataTable>
En el bean solo tenemos que...
public class MyBean {
private ArrayList items = new ArrayList();
private HtmlDataTable dataTable;
public ArrayList getItems() {
return items;
}
public void setItems(List items) {
this.items = new ArrayList(items);
}
public void remove(){
ItemBean item = (ItemBean) getDataTable().getRowData();
items.remove(item);
}
public HtmlDataTable getDataTable() {
return dataTable;
}
public void setDataTable(HtmlDataTable dataTable){
this.dataTable = dataTable;
}
}
Validar un input en JSF
Este es un ejemplo de como validar que un email es correcto. Aunque sólo se mira si se ha escrito el símbolo @, se pueden utilizar también expresiones regulares.
En la página xhtml o jspx:
< div id="loginForm">
< h:form id="registerInput">
< h:panelGrid width="375px" bgcolor="#e6edfd" columns="2" border="0">
< h:commandLink action="#{usuario.haceClickEnLogin}">Login/Registro< /h:commandLink>
< /h:panelGrid>
< h:message id="errorEmail" for="error" errorStyle="color:red"/ >
< /h:form>
< /div>
En el BackBean (Sabiendo que tenemos un atributo String email; con su get y set):
public void validaEmail(FacesContext context,
UIComponent toValidate,
Object value) {
String emailIntroducido = (String) value;
if (!emailIntroducido.contains("@")) {
FacesMessage message = new FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_ERROR);
message.setSummary("Email no valido");
message.setDetail("Email no valido");
context.addMessage("registerInput:error", message);
}
}
Mandar parámetros por JSF
Ejemplo de cómo mandar parámetros de un JSF (xhtml) a un BackBean:
En la página xhtml o jspx:
< h:commandLink actionListener="#{inventoryList.filtrar}" >
< f:attribute name="filtro" value="#{inventoryList.filtro}"/>
< span>Filtrar< /span>
< /h:commandLink>
En el back bean (invertoryList):
public void filtrar(ActionEvent event) {
String filtro = (String) event.getComponent().getAttributes().get("filtro");
}