Here is more detail...
Sorry if I was not clear.. pls help in trouble... :(
a) "It adds the row but values of previous rows are populated by default."
Reagent entity contains treatment and 1 reagent can have multiple treatments
If h:inputText id="treatmentCompoundName" contains say "aaa" and when I click "Add treatments" link, it adds new h:inputText for treatment compound as per ui:repeat
but new h:inputText for treatment compound displays the same value as "aaa" it should be null.
Code:
<ui:repeat value="#{quantExperimentHome.reagent1}" var="info" >
<h:inputText id="pname1" required="true" value="#{info.pname}"/>
....
<ui:repeat value="#{info.treatment}" var="itreat">
<h:inputText id="treatmentCompoundName" value="#{itreat.treatmentCompoundName}"/>
......
</ui:repeat>
<h:commandLink action="#{quantExperimentHome.addTreatmentLink}"
value="Add treatments" immediate="true" >
<f:param name="re_hashcode" value="#{info.hashCode()}"/> </h:commandLink>
</ui:repeat>
b) "
It calls hibernate and enters record in treatment table... it should only add row to ui... and should not do any insert..." I have also attached QuantExperimentHome code, Reagent and Treatment entity..
"I guess reagent1[i] is a managed object and that's why you have all this problem in the first place. You could do two things here, clear you session object or set it to read only by setting autoFlush to Manual. However, you need to flush the changes when it is required."I think you are right reagent1[i] should be a managed object as it is update screen... as I am new to this, please guide me for the 2 options on how and which place I should add the code..
Code:
@Name("quantExperimentHome")
public class QuantExperimentHome extends EntityHome<QuantExperiment> {
@In(create = true)
ProjectHome projectHome;
@Out(required=false)
@In(required=false)
TreatmentHome treatmentHome;
public void setQuantExperimentHjid(Long id) {
setId(id);
}
public Long getQuantExperimentHjid() {
return (Long) getId();
}
@Override
protected QuantExperiment createInstance() {
QuantExperiment quantExperiment = new QuantExperiment();
return quantExperiment;
}
public void wire() {
getInstance();
Project project = projectHome.getDefinedInstance();
if (project != null) {
getInstance().setProject(project);
}
}
public boolean isWired() {
if (getInstance().getProject() == null)
return false;
return true;
}
public QuantExperiment getDefinedInstance() {
return isIdDefined() ? getInstance() : null;
}
public List<Reagent> getReagent() {
return getInstance() == null ? null : new ArrayList<Reagent>(
getInstance().getReagent());
}
//CUSTOM FUNCTIONALITY STARTS here
@Out(required=false)
@In(required=false)
ReagentHome reagentHome=new ReagentHome();
@In(create=true)
private FacesMessages facesMessages;
@In
private EntityManager entityManager;
private Reagent[] reagent1=new Reagent[]{new Reagent()};
private Reagent initializeReagent(Reagent re){
List<Treatment> t=re.getTreatment();
if(t.size()<1){
t.add(new Treatment());
}
re.setTreatment(t);
return re;
}
public QuantExperimentHome(){
super();
Identity.setSecurityEnabled(true);
for(int i=0;i<reagent1.length;i++){
reagent1[i]=initializeReagent(reagent1[i]);
}
}
public String addTreatmentLink(){
javax.faces.context.FacesContext facesContext = (new org.jboss.seam.faces.FacesContext()).getContext();
javax.servlet.http.HttpServletRequest hsr=(javax.servlet.http.HttpServletRequest)facesContext.getCurrentInstance().getExternalContext().getRequest();
String reagentHashcode=hsr.getParameter("re_hashcode");
for(int i=0;i<reagent1.length;i++){
if(reagent1[i].hashCode()==Integer.parseInt(reagentHashcode)){
/////////////
Treatment treatment = new Treatment();
treatment.setReagent(reagent1[i]);
reagent1[i].getTreatment().add(treatment);
///////////
//reagent1[i].getTreatment().add(new Treatment());
break;
}
}
return "";
}
public String persist(){
java.util.ArrayList<QuantExperiment> arrListQuantExp=new java.util.ArrayList<QuantExperiment>();
QuantExperiment qe=getInstance();
ArrayList<Reagent> arrListReagent=new ArrayList<Reagent>();
for(int i=0;i<reagent1.length;i++){
arrListReagent.add(reagent1[i]);
}
super.persist();
return "";
}
public void editProject(){
List<Reagent> liRe=getInstance().getReagent();
reagent1 = new Reagent[liRe.size()];
for(int i=0;i<reagent1.length;i++){
reagent1[i]=liRe.get(i);
ReagentHome rh=new ReagentHome();
rh.setInstance(reagent1[i]);
rh.treatmentHome=new TreatmentHome();
rh.treatmentHome.setTreatmentHjid(reagent1[i].getHjid());
//rh.wire();
}
}
private boolean findMatchingReagent(Reagent re){
boolean bl=false;
for(int j=0;j<this.reagent1.length;j++){
if(reagent1[j].getHjid()==re.getHjid()){
bl=true;
break;
}
}
return bl;
}
@Override
public String update(){
QuantExperiment qeUpdate = getInstance();
List<Reagent> re=getInstance().getReagent();
int xs=re.size();
for(int i=0;i<xs;i++){
Reagent reg=re.get(i);
if(!findMatchingReagent(reg)){
List<Treatment> trs=reg.getTreatment();
int xt=trs.size();
for(int k=0;k<xt;k++){
entityManager.remove(trs.get(k));
}
entityManager.remove(reg);
//rh.remove();
}else{
System.out.println(reg.getHjid()+" has not been removed");
}
}
re.clear();
for(int i=0;i<this.reagent1.length;i++){
reagent1[i].setLabel(qeUpdate.getQuantitationType());
reagent1[i].setEntryPoint(reagent1[i].getAffinityCompound());
re.add(reagent1[i]);
}
return super.update();
}
/**
* @return the reagent1
*/
public Reagent[] getReagent1() {
return reagent1;
}
/**
* @param reagent1 the reagent1 to set
*/
public void setReagent1(Reagent[] reagent1) {
this.reagent1 = reagent1;
}
}
Reagent Entity----------------
Code:
protected List<Treatment> treatment;
@OneToMany(cascade = {CascadeType.ALL}, mappedBy="reagent")
public List<Treatment> getTreatment() {
if (treatment == null) {
treatment = new ArrayList<Treatment>();
}
return this.treatment;
}
public void setTreatment(List<Treatment> treatment) {
for(Treatment t : treatment){
t.setReagent(this);
}
this.treatment = treatment}
Treatment entity-------------------
Code:
public class Treatment impl...{
protected Reagent reagent;
@ManyToOne(optional=false)
public Reagent getReagent() {
return reagent;
}
public void setReagent(Reagent reagent) {
this.reagent = reagent;
}