无法使用selectManyCheckbox在对象的arrayList中添加对象

时间:2018-08-08 17:41:44

标签: jsf primefaces

我想将一个对象列表中的一个或多个对象添加到另一个空列表中。我确信第一个列表已经初始化,因为我可以在p:selectManyCheckbox中打印它。

我认为它不会将对象Comite复制到列表中,而是将字符串复制到列表中:java.lang.ClassCastException:java.lang.String无法转换为com.primasatis.jsf.model.Comite < / p>

因此,如何将其复制到列表中?

public class Comite {
	private int idComite;
	private int idPerimetre;
	private String comite;

	public Comite(int idComite, int idPerimetre, String comite) {
		super();
		this.idComite = idComite;
		this.idPerimetre = idPerimetre;
		this.comite = comite;
	}
}

public static boolean addUserComiteRelation(int idUser, List<Comite> comites) {
		System.out.println(comites.size()); // print the good number
		for(int i=0; i<comites.size();i++) {
			  System.out.println(comites.get(i).comite); //error here
			}

	}
<h:form>
<p:outputLabel for="Comites" value="Comités" />
<p:selectManyCheckbox id="Comites" value="#{utilisateur.comites}"
							required="true"
							requiredMessage="L'utilisateur doit appartenir à au moins un comité">
<f:selectItems value="#{sessionScope.utilisateur.comites}" />
</p:selectManyCheckbox>
<h:message for="Comites"></h:message>
</h:form>

我的课程utilisateur(@ Named和@SessionScoped)的快速浏览

        public class Utilisateur implements Serializable {
    	private Perimetre perimetreUtilisateur = null;
    	private List<Comite> comites = null;
    	

    	 @PostConstruct
    	 private void init() {
    		 perimetreUtilisateur = new Perimetre();
    		 comites = new ArrayList<>();
    	 }
    }

1 个答案:

答案 0 :(得分:1)

使用p:selectManyCheckbox的通常方法是提供List个对象中的javax.faces.model.SelectItem个。

如果您想在p:selectManyCheckbox中使用自己的Pojos作为选项,则必须编写一个Converter(javax.faces.convert.FacesConverter)。

例如,您的转换器看起来像:

在我的ManagedBean(示例:ComiteManagedBean)类中,我会将所有Comite实例保留在{{1 }}作为密钥。

MAP