sbb_20
Outubro 20, 2010, 11:45am
#1
galera tenho uma pagina de cadastro com um evento em um radio button, que ao selecionar o tipo de formulario o mesmo é carregado. o problema é que o valor atual nunca é passado e sim o anterior!!
alguem sabe como resolver?
<h:selectOneRadio value="#{clienteController.selecaoTipoCliente}" styleClass="textoFormulario">
<f:selectItem itemValue="PF" itemLabel="PF"/>
<f:selectItem itemValue="PJ" itemLabel="PJ"/>
<f:ajax event="change" render="formularioPF"/>
</h:selectOneRadio>
<h:panelGroup id="formularioPF">
</h:panelGroup>
<h:panelGroup id="formularioPJ">
</h:panelGroup>
clienteController
public void setSelecaoTipoCliente(String selecaoTipoCliente) {
this.selecaoTipoCliente = selecaoTipoCliente;
if (getSelecaoTipoCliente().equals("PF")) {
setTipoFormularioPF(true);
setTipoFormularioPJ(false);
} else {
setTipoFormularioPJ(true);
setTipoFormularioPF(false);
}
}
Posta ai o restante do código do seu bean.
sbb_20
Outubro 20, 2010, 1:55pm
#3
ta ai o codigo completo!
package controler;
import jpa.dominio.Cliente;
import controler.util.JsfUtil;
import controler.util.PaginationHelper;
import eao.ClienteFacade;
import java.util.ResourceBundle;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;
@ManagedBean (name="clienteController")
@SessionScoped
public class ClienteController {
private Cliente current;
private DataModel items = null;
@EJB private eao.ClienteFacade ejbFacade;
private PaginationHelper pagination;
private int selectedItemIndex;
private String selecaoTipoCliente = "PF";
private Boolean tipoFormularioPF = true;
private Boolean tipoFormularioPJ = false;
public ClienteController() {
}
public Cliente getSelected() {
if (current == null) {
current = new Cliente();
selectedItemIndex = -1;
}
return current;
}
private ClienteFacade getFacade() {
return ejbFacade;
}
public PaginationHelper getPagination() {
if (pagination == null) {
pagination = new PaginationHelper(10) {
@Override
public int getItemsCount() {
return getFacade().count();
}
@Override
public DataModel createPageDataModel() {
return new ListDataModel(getFacade().findRange(new int[]{getPageFirstItem(), getPageFirstItem()+getPageSize()}));
}
};
}
return pagination;
}
public String prepareList() {
recreateModel();
return "List";
}
public String prepareView() {
current = (Cliente)getItems().getRowData();
selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
return "View";
}
public String prepareCreate() {
current = new Cliente();
selectedItemIndex = -1;
return "Create";
}
public String create() {
try {
getFacade().create(current);
JsfUtil.addSuccessMessage(ResourceBundle.getBundle("resource/Bundle").getString("ClienteCreated"));
return prepareCreate();
} catch (Exception e) {
JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("resource/Bundle").getString("PersistenceErrorOccured"));
return null;
}
}
public String prepareEdit() {
current = (Cliente)getItems().getRowData();
selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
return "Edit";
}
public String update() {
try {
getFacade().edit(current);
JsfUtil.addSuccessMessage(ResourceBundle.getBundle("resource/Bundle").getString("ClienteUpdated"));
return "View";
} catch (Exception e) {
JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("resource/Bundle").getString("PersistenceErrorOccured"));
return null;
}
}
public String destroy() {
current = (Cliente)getItems().getRowData();
selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
performDestroy();
recreateModel();
return "List";
}
public String destroyAndView() {
performDestroy();
recreateModel();
updateCurrentItem();
if (selectedItemIndex >= 0) {
return "View";
} else {
// all items were removed - go back to list
recreateModel();
return "List";
}
}
private void performDestroy() {
try {
getFacade().remove(current);
JsfUtil.addSuccessMessage(ResourceBundle.getBundle("resource/Bundle").getString("ClienteDeleted"));
} catch (Exception e) {
JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("resource/Bundle").getString("PersistenceErrorOccured"));
}
}
private void updateCurrentItem() {
int count = getFacade().count();
if (selectedItemIndex >= count) {
// selected index cannot be bigger than number of items:
selectedItemIndex = count-1;
// go to previous page if last page disappeared:
if (pagination.getPageFirstItem() >= count) {
pagination.previousPage();
}
}
if (selectedItemIndex >= 0) {
current = getFacade().findRange(new int[]{selectedItemIndex, selectedItemIndex+1}).get(0);
}
}
public DataModel getItems() {
if (items == null) {
items = getPagination().createPageDataModel();
}
return items;
}
private void recreateModel() {
items = null;
}
public String next() {
getPagination().nextPage();
recreateModel();
return "List";
}
public String previous() {
getPagination().previousPage();
recreateModel();
return "List";
}
public SelectItem[] getItemsAvailableSelectMany() {
return JsfUtil.getSelectItems(ejbFacade.findAll(), false);
}
public SelectItem[] getItemsAvailableSelectOne() {
return JsfUtil.getSelectItems(ejbFacade.findAll(), true);
}
@FacesConverter(forClass=Cliente.class)
public static class ClienteControllerConverter implements Converter {
public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
if (value == null || value.length() == 0) {
return null;
}
ClienteController controller = (ClienteController)facesContext.getApplication().getELResolver().
getValue(facesContext.getELContext(), null, "clienteController");
return controller.ejbFacade.find(getKey(value));
}
java.lang.Integer getKey(String value) {
java.lang.Integer key;
key = Integer.valueOf(value);
return key;
}
String getStringKey(java.lang.Integer value) {
StringBuffer sb = new StringBuffer();
sb.append(value);
return sb.toString();
}
public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
if (object == null) {
return null;
}
if (object instanceof Cliente) {
Cliente o = (Cliente) object;
return getStringKey(o.getIdCliente());
} else {
throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: "+ClienteController.class.getName());
}
}
}
public String getSelecaoTipoCliente() {
return selecaoTipoCliente;
}
public void setSelecaoTipoCliente(String selecaoTipoCliente) {
this.selecaoTipoCliente = selecaoTipoCliente;
if (getSelecaoTipoCliente().equals("PF")) {
setTipoFormularioPF(true);
setTipoFormularioPJ(false);
} else {
setTipoFormularioPJ(true);
setTipoFormularioPF(false);
}
}
public Boolean getTipoFormularioPF() {
return tipoFormularioPF;
}
public void setTipoFormularioPF(Boolean tipoFormularioPF) {
this.tipoFormularioPF = tipoFormularioPF;
}
public Boolean getTipoFormularioPJ() {
return tipoFormularioPJ;
}
public void setTipoFormularioPJ(Boolean tipoFormularioPJ) {
this.tipoFormularioPJ = tipoFormularioPJ;
}
}
Kra um código q eu fiz aqui com a mesma configuração do seu código funcionou sem problemas. Será q vc ñ tem algum erro em algum outro ponto da sua lógica?
sbb_20
Outubro 20, 2010, 5:27pm
#5
tem razao, criei outro projeto so para testar esse codigo e funcionou, so nao sei porq nao funciona no q eu preciso que funcione rss, de qualquer forma valew cara!!!
vou ver aqui essa logica maluca!!