normandesjr:
Não, não seria isso. Deixa eu tentar te explicar.
Você simplesmente precisa setar o objeto A no objeto B. Existem muitas formas de se fazer isso, seguindo o exemplo que você sitou de um selectOneMenu, ficaria:
<h:selectOneMenu value="#{seuBean.b.a}" converter="aConverter"/>
O converter "aConverter" é especificado no faces-config.xml e serve para você converter seu objeto em String - para ele "aparecer" na tela; e de String para seu objeto - para poder utilizá-lo como um objeto.
Assim você setará no objeto B o objeto A e, devido ao seu mapeamento, ele saberá que quando for persistir os dados ele deve pegar o Id do objeto A e montar o insert do objeto B com este Id de A.
É isso ae.. não sei se ficou bem claro. A idéia do conversor é simples, é só você implementar Converter, implementando os métodos getAsObject e getAsString.
Qualquer dúvida estou a disposição.
Abraços.
Oi pessoal !! Normandes o que você falou ficou bem claro e foi o que ja tentei fazer mas da mensagem de valor inválido.
Poderia me ajudar por favor ? Estou utilizando JSF RI 1.2 da Sun.
Ja implementei o getAsObject e getAsString como segue abaixo:
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import com.leucotron.updateServer.control.ATLParameterDAO;
public class ParamConverter implements Converter {
// Actions ------------------------------------------------------------------------------------
public Object getAsObject(FacesContext context, UIComponent component, String value) {
return ATLParameterDAO.getParam(Integer.parseInt(value));
}
public String getAsString(FacesContext context, UIComponent component, Object value) {
return ((AtlParameter)value).getId().toString();
}
}
e o metodo da minha Action que preenche a lista do selectOneMenu:
public String inputRegras() {
Debug.print("ATLAction.input() :: SUCCESS");
f_rule = new AtlRule();
f_params = ATLParameterDAO.getList();
paramSel = new ArrayList<SelectItem>();
for(AtlParameter temp : f_params)
paramSel.add(new SelectItem(temp, temp.getName()));
return "formRegras";
}
e a minha view:
<h:outputLabel value="Parâmetro" /><h:selectOneMenu value="#{atlAction.paramx}">
<f:selectItems value="#{atlAction.paramSel}"/>
<f:converter converterId="paramConvert" />
</h:selectOneMenu>
A mensagem de erro é:
12/11/2007 09:23:16 com.sun.faces.lifecycle.RenderResponsePhase execute
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=j_id_jsp_2018985718_4:j_id_jsp_2018985718_23[severity=(ERROR 2), summary=(j_id_jsp_2018985718_4:j_id_jsp_2018985718_23: Validation Error: Value is not valid), detail=(j_id_jsp_2018985718_4:j_id_jsp_2018985718_23: Validation Error: Value is not valid)]
Se alguem puder ajudar desde ja agradeço..
Valeu pessoal !!!