2013-01-02 3 views
1

JSF 페이지의 AJAX에 문제가 있습니다. 그는 콩 메서드를 호출하지 않습니다. 변환기가 작동하고 올바른 개체를 반환하지만 Bean 메서드는 호출하지 않습니다. 섹션 호출을 실행하면 제거됩니다. 커버 러를 제거하고 Id 메소드 호출 만 보내는 경우. 함께 실패합니다.JSF ajax 및 사용자 정의 변환기

JSF 페이지

<h:form id="jewelForm"> 
    <!-- ... --> 
    <h:selectOneMenu id="material" value="#{jewelBean.material}" > 
     <f:converter converterId="materialConverter"/> 
     <f:selectItems value="#{jewelBean.materialList}" var="c" 
         itemLabel="#{c.name}" itemValue="#{c.id}" /> 
    </h:selectOneMenu> 

    <h:commandButton id="but1" value="#{titles.addThisMat}"> 
     <f:ajax id ="aj1" 
       listener="#{jewelBean.addMaterial}" 
       render="jewelForm:matTable" 
       execute="material"/> 
    </h:commandButton> 

    <h:dataTable id ="matTable" 

    </h:dataTable> 
    <h:commandButton value="#{titles.createThisJ}" 
        action="#{jewelBean.saveJewel()}" /> 
</h:form> 

@ManagedBean(name = "jewelBean") 
@SessionScoped 
public class JewelBean implements Serializable { 

private Material material; 

public void addMaterial() { 
    MaterialJewel mj = new MaterialJewel(); 
    mj.setMaterial(material); 
    mj.setWeight(materialWeight); 
    materialJewels.add(mj); 
} 

public Material getMaterial() { 
    return material; 
} 

public void setMaterial(Material material) { 
    this.material = material; 
} 

}

계산기

@FacesConverter("materialConverter") 
public class materialConverter implements Converter { 

@Override 
public Object getAsObject(FacesContext context, UIComponent component, String value) { 

    try { 
    //finding object with DAO 
     return material; 
     } 
    } catch (NumberFormatException ex) { 
     } 
} 

@Override 
public String getAsString(FacesContext context, UIComponent component, Object value) { 
    return value.toString(); 

} 
} 

의견에 감사드립니다.

답변

0

나는 내 문제를 해결했습니다. 그것은 selectOneMenu에있었습니다. 가장 큰 문제는 itemValue in selectOneMenu must be the same type as value입니다. 그래서 변환기, getAsString 메서드를 다시 작성해야합니다. 엔티티의 equals 메소드도 this과 같아야합니다.

는 JSF 페이지

<h:selectOneMenu id="material" value="#{jewelBean.material}" > 
     <f:converter converterId="materialConverter"/> 
     <f:selectItems value="#{jewelBean.materialList}" var="c" 
        itemLabel="#{c.name}" itemValue="#{c}" /> 
</h:selectOneMenu> 

고정 변환기 방법에 선택 고정

@Override 
public String getAsString(FacesContext context, UIComponent component, Object value) { 
    Material material = (Material) value; 
    return (material.getId() != 0) ? String.valueOf(material.getId()) : null; 
} 
0

f : ajax에서 리스너를 제거하고 commandbutton에 actionListener를 추가하십시오. 그게 도움이 되니?

+0

아니, 나는 그것을 시도하고 도움이되지 않습니다 . – kisileno

관련 문제