2016-04-24 13 views
0

selectOneMenuの内のエンティティにJSFコンバータを適用しようとしていますが、コンバータが認識されません、私は、私のXHTMLファイルにこの警告を取得itemLabel = "#{projet.nomProjet}":プロパティ 'nomProjet'が型java.lang.Stringに見つかりません

<<"nomProjet" cannot be resolved>> 

、私が実行したときに、私はエラーHTTP 500取得していたアプリケーション:

selectOneMenu I:

itemLabel="#{projet.nomProjet}": Property 'nomProjet' not found on type java.lang.String 

は、ここに私のコードですnは私の見解

<p:selectOneMenu id="projet" converter="projetConverter" value="# {affectation.selectedProjet}" > 
           <f:selectItems var="projet" itemValue="#{projet}" itemLabel="#{projet.nomProjet}" value="#{affectation.projetsAffectablesCollaborateur()}" /> 
          </p:selectOneMenu> 

コンバータ

@Component 
@FacesConverter("projetConverter") 
public class ProjetConverter implements Converter { 

@Autowired 
private ProjetRepository projetRepository; 

@Override 
public Object getAsObject(FacesContext context, UIComponent component, String value) { 
    if (value == null || value.isEmpty()) { 
     return null; 
    } 

    try { 
     Projet projet = projetRepository.findByIdProjet(Long.valueOf(value)); 
     return projet; 
    } catch (NumberFormatException exception) { 
     throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erreur de conversion", "ID de projet invalide")); 
    } 

} 

@Override 
public String getAsString(FacesContext context, UIComponent component, Object value) { 
    if (value == null) { 
     return ""; 
    } 

    if (value instanceof Projet) { 
     return String.valueOf(((Projet) value).getIdProjet()); 
    } else { 
     throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erreur de conversion", "Instance de projet invalide")); 
    } 

} 
} 

そして、私のエンティティ:

@Entity 
@NamedQuery(name = "Projet.findAll", query = "SELECT p FROM Projet p") 
public class Projet implements Serializable { 
private static final long serialVersionUID = 1L; 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private long idProjet; 

private String nomProjet; 
@Transient 
private List<Role> listRoles = new ArrayList<Role>(); 

public List<Role> getListRoles() { 
    return listRoles; 
} 

public void setListRoles(List<Role> listRoles) { 
    this.listRoles = listRoles; 
} 

// bi-directional many-to-one association to AffectationProjetRole 
@OneToMany(mappedBy = "projet") 
private List<AffectationProjetRole> affectationProjetRoles; 

public Projet() { 
} 

public Projet(String nomProjet) { 
    this.nomProjet = nomProjet; 
} 

public long getIdProjet() { 
    return this.idProjet; 
} 

public void setIdProjet(long idProjet) { 
    this.idProjet = idProjet; 
} 

public String getNomProjet() { 
    return this.nomProjet; 
} 

public void setNomProjet(String nomProjet) { 
    this.nomProjet = nomProjet; 
} 

public List<AffectationProjetRole> getAffectationProjetRoles() { 
    return this.affectationProjetRoles; 
} 

public void setAffectationProjetRoles(List<AffectationProjetRole> affectationProjetRoles) { 
    this.affectationProjetRoles = affectationProjetRoles; 
} 

public AffectationProjetRole addAffectationProjetRole(AffectationProjetRole affectationProjetRole) { 
    getAffectationProjetRoles().add(affectationProjetRole); 
    affectationProjetRole.setProjet(this); 

    return affectationProjetRole; 
} 

public AffectationProjetRole removeAffectationProjetRole(AffectationProjetRole affectationProjetRole) { 
    getAffectationProjetRoles().remove(affectationProjetRole); 
    affectationProjetRole.setProjet(null); 

    return affectationProjetRole; 
} 

@Override 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + (int) (idProjet^(idProjet >>> 32)); 
    return result; 
} 

@Override 
public boolean equals(Object obj) { 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 
    Projet other = (Projet) obj; 
    if (idProjet != other.idProjet) 
     return false; 
    return true; 
} 
} 

これが原因とされており、どのように私はそれを解決できますか?

答えて

0
ITEMLABELは= "#{projet.nomProjet}"

:プロパティ 'nomProjet' java.lang.String型に見出されない

このエラーメッセージは#{projet}が実際java.lang.String実行中であることを告げます。 #{projet}がどこから来ているのか見てみましょう。

<f:selectItems value="#{affectation.projetsAffectablesCollaborateur()}" 
    var="projet" itemValue="#{projet}" itemLabel="#{projet.nomProjet}" /> 

したがって、#{affectation.projetsAffectablesCollaborateur()}は実際にList<String>を返しました。これが予期しない場合は、ジェネリック型の消去に注意し、ジェネリック型が間違って想定されていないすべてのチェックされていないキャストをダブルチェックしてください。一般的に、間違いは忍耐層にある。

レンダリング項目のラベルにコンバーターがまったく含まれていないので、表示することとそれを責めることは不要です。コンバータは項目値に対してのみ使用されます。

関連する問題