Problema com update jsf

3 respostas
PauloCC

Pessoal, tenho um problema com update...vou tentar explicar detalhadamente.
Tenho uma tela de cadastro simples com dois campos Silga e País e dois botões de confirmar e cancelar

Quando clico na opção update, a tela é carregada normalmente com a sigla e o nome...
Se eu apago a sigla e modifico o nome do país e clico em confirmar, o sistema me retorna
uma mensagem dizendo que a sigla é obrigatório, até aí está tudo certo!!
O problema está no botão fechar!
Quando faço essa operação deixando a sigla vazia e mofico o nome e confirmo, vem a msg de obrigatoriedade...
o problema é se em seguida eu fecho a tela...
Depois de fechar a tela eu clico no mesmo registro pra fazer update ele tráz a sigla preenchida(correto), mais tráz o nome que foi
alterado, não deveria, pois eu nao confirmei a transação.

Ex: SIgla = Vazia
Nome = mudei de Brasil para Portugal e confirmei, o sistema tráz a msg de obrigatoriedade

Em seguida, fechei a tela e cliquei em update da mesma novamente, ao invés de trazer Brasil, tráz Portugal.
Se eu trocar, deixando o nome vazio e alterar a sigla acontece o mesmo!
Se eu alterar os dois, da certo o update, o problema está em deixar um dos dois vazios.

Código:

<rich:modalPanel id="editPanel" width="680" autosized="true">
			        <f:facet name="header">
			            <h:outputText value="#{msg['screen.sc_places_country.label.lb_country_header_alterar']}" />
			        </f:facet>
			        <f:facet name="controls">
			            <h:panelGroup>
			                <h:graphicImage value="/images/modal/close.png" id="hidelink1" styleClass="hidelink"/>
			                <rich:componentControl for="editPanel" attachTo="hidelink1" operation="hide" event="onclick" />
			            </h:panelGroup>
			        </f:facet>
					<a4j:form>					
						<a4j:loadScript src="/js/mask/jquery.maskedinput-1.2.1.js" ></a4j:loadScript>
							<rich:messages  errorClass="errorMessage" infoClass="infoMessage">
							</rich:messages>  
							
							<a4j:outputPanel ajaxRendered="true">
																	
							<h:panelGrid columns="5" styleClass="widthGrid" columnClasses="labelGrid,valueGrid, ,labelGrid,valueGrid">

										<h:outputText value="*#{msg['screen.sc_places_country.label.lb_country_txShortName']}: " />
										<h:inputText value="#{countryMBean.country.txShortName1}" size="15" required="true" id="txShortName1" label="#{msg['screen.sc_places_country.label.lb_country_txShortName']}">
											<f:validateLength minimum="1" maximum="50" />
										</h:inputText>
										
										<rich:spacer width="10%"/>							
																				
										<h:outputText value="*#{msg['screen.sc_places_country.label.lb_country_txStatus']}: " />
										<h:selectOneMenu value="#{countryMBean.country.recordStatus.idRecordStatus}" style="width:120px" required="true" id="idStatus" label="#{msg['screen.country.label.txStatus']}">
											<f:selectItem itemValue="" itemLabel="#{msg['screen.sc_places_country.label.lb_country_txSelect']}" />
											<f:selectItems value="#{recordStatusMBean.rsList}" />
										</h:selectOneMenu>
																			
									</h:panelGrid>
									
									<h:panelGrid columns="2" styleClass="widthGrid" columnClasses="labelGrid,fieldName">
										
										<h:outputText value="*#{msg['screen.sc_places_country.label.lb_country_txLongName']}:"  />
										<h:inputText immediate="false" value="#{countryMBean.country.txLongName1}" size="59" required="true" id="txLongName1" label="#{msg['screen.sc_places_country.label.lb_country_txLongName']}">
											<f:validateLength minimum="1" maximum="255" />
										</h:inputText>
																													
									</h:panelGrid>
									
									<rich:spacer height="20"/>
									<rich:separator height="2" lineType="solid" />	
									<h:outputText value="#{msg['screen.sc_places_country.message.msg_campo_obrigatorio']}"/>
									<rich:spacer height="10"/>
									
									<p >
										&lt;h:panelGrid columns="2" styleClass="buttons"&gt;
											&lt;a4j:commandButton 
												value="#{msg['screen.sc_places_country.button.bt_confirmar']}" 
												action="#{countryMBean.save}"
												reRender="countryDataTableList"
												oncomplete="if (#{facesContext.maximumSeverity==null}) #{rich:component('editPanel')}.hide();"&gt;
											&lt;/a4j:commandButton&gt;
											&lt;a4j:commandButton 
												value="#{msg['screen.sc_places_country.button.bt_fechar']}" 
												action="#{countryMBean.novo}"
												onclick="#{rich:component('editPanel')}.hide();return false;" &gt;
											&lt;/a4j:commandButton&gt;	
										&lt;/h:panelGrid&gt; 
									</p>
							&lt;/a4j:outputPanel&gt;
					&lt;/a4j:form&gt;
			    &lt;/rich:modalPanel&gt;

3 Respostas

M

Poste seu managedbean.

PauloCC
markin1:
Poste seu managedbean.

Ok markin1 ... aí está o managedBean

package com.tti.hd3web.register.faces; 

import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import com.tti.hd3web.register.facade.CountryFacade;
import com.tti.hd3web.register.model.City;
import com.tti.hd3web.register.model.Country;
import com.tti.hd3web.register.model.State;
import com.tti.richfaces.InfraConstants;
import com.tti.richfaces.UserInfo;
import com.tti.richfaces.i18n.I18nMessagesUtil;

public class CountryManagedBean {
	private Country country; 
	private String txLongName1Filter = "";
	
	List<SelectItem> optionList = new ArrayList<SelectItem>();
	
	public String getTxLongName1Filter() {
		return txLongName1Filter;
	}
	public void setTxLongName1Filter(String txLongName1Filter) {
		this.txLongName1Filter = txLongName1Filter;
	}
	public Country getCountry() {
		return country;
	}
	public void setCountry(Country country) {
		this.country = country;
	}
	private CountryFacade countryFacade;
	
		
	public CountryFacade getCountryFacade() {
		return countryFacade;
	}
	public void setCountryFacade(CountryFacade countryFacade) {
		this.countryFacade = countryFacade;
	}
	public void create(){
	try{	
		this.country.setDtCreation(new Date());
		Map<String, Object> sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
		UserInfo userInfo = (UserInfo) sessionMap.get(InfraConstants.USER_INFO_SESSION_KEY);
		this.country.getSecContext().setIdSecContext(userInfo.getContext().getIdSecContext());
		//this.country.setIdSecContext(userInfo.getContext().getIdSecContext());
		countryFacade.insertCountry(this.country);
		this.country = new Country();
		message();
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
	public List<Country> getList() {
		return countryFacade.listCountry("%" + this.txLongName1Filter.toUpperCase() + "%");
	}
	public void novo() {
		this.country = new Country();
	}

	public void save() {
		if (this.country.getIdCountry() == null) {
			create();
		} else {
			update();
		}
		
		//limpa os campos
		//this.country = new Country();
		
		
	}
		
	public void update() {
		country.setDtModify(new Date());
		countryFacade.updateCountry(this.country);
	}
	
	public void delete() {
		try {
			countryFacade.deleteCountry(this.country);
		} catch (Exception e) {
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage("teste", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi possível excluir!\nO registro pode estar sendo usado em outros cadastros.", "iiiiiiiiiii"));
			Iterator<FacesMessage> it = context.getMessages();

		}
	}
		
	public List<Country> getListAll() {
		return countryFacade.listCountry("%%");
	}

	public List<SelectItem> getCountryListOptions() {
		List<SelectItem> optionList = new ArrayList<SelectItem>();
		
		List<Country> list = getListAll();
		for (Iterator<Country> iterator = list.iterator(); iterator.hasNext();) {
			Country country = (Country) iterator.next();
			optionList.add(new SelectItem(country.getIdCountry(), country.getTxLongName1()));
		}
		
		return optionList;
	}
	
	public void message(){
		FacesContext context = FacesContext.getCurrentInstance();
		String updateMsg = I18nMessagesUtil.getSimpleMessageString("screen.msgs_popup.message.txMsgUpdate", context);
		String createMsg = I18nMessagesUtil.getSimpleMessageString("screen.msgs_popup.message.txMsgInsert", context);
		if(this.country.getIdCountry() != null){							
			FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,updateMsg,"");
			context.addMessage("editPanel",message);
		}else{
			FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,createMsg,"");
			context.addMessage("editPanel",message);
		}
		
	}
	
	public List<Country> listAll() {
		return countryFacade.listCountry("%%");
	}
	
	public List<SelectItem> getOptionList() {
		optionList = new ArrayList<SelectItem>();

		List<Country> liststate = listAll();
		
		for (Iterator<Country> iterator = liststate.iterator(); iterator.hasNext();) {
			Country country= (Country) iterator.next();
			optionList.add(new SelectItem(country.getIdCountry(),country.getTxLongName1()));
		}
		
		return optionList;
	}
	
	public List<SelectItem> getOptionsListToCountry() {
		
		optionList = new ArrayList<SelectItem>();

		List<Country> liststate = listAll();
		
		for (Iterator<Country> iterator = liststate.iterator(); iterator.hasNext();) {
			Country country= (Country) iterator.next();
			if(country.getRecordStatus().getIdRecordStatus()==1){
				optionList.add(new SelectItem(country.getIdCountry(),country.getTxLongName1()));
			}
		}
		
		return optionList;
	}

}
PauloCC

Alguma sugestão pessoal??

Criado 7 de abril de 2010
Ultima resposta 8 de abr. de 2010
Respostas 3
Participantes 2