2015-02-22 2 views
0

Мне нужна ваша помощь в решении ошибки в журнале. В моем JSP, я имею selectmanycheckbox:SelectManyCheckbox не находит своих дочерних компонентов

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<%@ page deferredSyntaxAllowedAsLiteral="true" %> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:f="http://java.sun.com/jsf/core"> 
     <h:form> 
      <h:selectManyCheckbox value="#{com.favoriteCar2}"> 
       <f:selectItems value="#{com.favoriteCar2Value}" /> 

     </h:selectManyCheckbox> 

     <br/> 


     <h:selectManyCheckbox value="#{com.favoriteCar3}"> 
      <f:selectItems value="#{com.favoriteCar3Value}" /> 
     </h:selectManyCheckbox> 

     <h:commandButton value="Submit" action="results" /> 
     <h:commandButton value="Reset" type="reset" /> 

    </h:form> 

и mybean:

import java.io.Serializable; 
    import java.util.Arrays; 
    import java.util.LinkedHashMap; 
    import java.util.Map; 

    import javax.faces.bean.ManagedBean; 
    import javax.faces.bean.SessionScoped; 


@ManagedBean 
@SessionScoped 

public class com implements Serializable{ 

    private static final long serialVersionUID = 7134492943336358840L; 

     public String[] favoriteCar1; 
       public String[] favoriteCar2; 
       public String[] favoriteCar3; 
       public String[] favoriteCar4; 

       public String[] getFavoriteCar2Value() 
       { 
         favoriteCar2 = new String [5]; 
         favoriteCar2[0] = "116"; 
         favoriteCar2[1] = "118"; 
         favoriteCar2[2] = "X1"; 
         favoriteCar2[3] = "Series 1 Coupe"; 
         favoriteCar2[4] = "120"; 

         return favoriteCar2; 
       } 

       public String getFavoriteCar2InString() 
       { 
         return Arrays.toString(favoriteCar2); 
       } 


       private static Map<String, Object> car3Value; 
       static 
       { 
         car3Value = new LinkedHashMap<String, Object>(); 
         car3Value.put("Car3 - 316", "BMW 316"); 
         car3Value.put("Car3 - 318", "BMW 318"); 
         car3Value.put("Car3 - 320", "BMW 320"); 
         car3Value.put("Car3 - 325", "BMW 325"); 
         car3Value.put("Car3 - 330", "BMW 330"); 
       } 

       public Map<String, Object> getFavoriteCar3Value() 
       { 
         return car3Value; 
       } 
       public String getFavoriteCar3InString() { 
         return Arrays.toString(favoriteCar3); 
       } 

} 

Журнал показывает ошибку и не флажок не отображается в СПЯ:

Java .lang.IllegalArgumentException: ожидается дочерний компонент типа UISelectItem/UISelectItems для типа компонента javax.faces.SelectMany (j_id_id2). Найдено [Ljava.lang.String

Даже я пробовал статические дети и не заселял их.

Так вы можете пожалуйста помочь

+0

Вам удалось воспроизвести ошибку, используя статические дети? Кажется, Java-код не нужен для конкретной ошибки. Кроме того, добавьте свои пространства имен JSP. – Smutje

+0

ваше управляемое bean-имя - «пользователь», а в вашем jsp вы используете «com», это ошибка только в вопросе? – Tarik

+0

@Smutje Даже статический не наступает –

ответ

0

Это потому, что ваше значение SelectItems является String[] см java docs относительно атрибута value из SelectItems в JSF 1.2:

выражение связывания

Значение, указывая на список или массив экземпляров SelectItem , содержащих информацию по этим параметрам.

Вы также возвращение стоимости вашего selectManyCheckbox в SelectItems, который не имеет смысла, вы должны лучше узнать больше о том, как использовать SelectItems. Вы можете найти много примеров в selectOneMenu wiki page, который очень похож на selectManyCheckbox, или в The Java EE 6 Tutorial (обратите внимание, что эти ссылки JSF 2.0, но это может помочь вам понять концепцию).

Что касается вашего примера, что должно быть что-то вроде этого:

private List<SelectItem> favoriteCar2Value; 


// (we will add only a getter, setter is not necessary) 
public List<SelectItem> getFavoriteCar2Value() { 

    favoriteCar2Value = new ArrayList<SelectItem>(); 

    favoriteCar2Value.add(new SelectItem("116", "116 label")); 
    favoriteCar2Value.add(new SelectItem("118", "118 label")); 
    favoriteCar2Value.add(new SelectItem("X1", "X1 label")); 
    favoriteCar2Value.add(new SelectItem("Series 1 Coupe", "Series 1 Coupe label")); 
    favoriteCar2Value.add(new SelectItem("120", "120 label")); 

    return favoriteCar2Value; 

} 

Finnaly, может быть, это время для вас рассмотреть вопрос о переходе на JSF 2.0, которая может позволить вам работать с Facelets вместо JSP, выгоды от поддержки Ajax ... Для четкого сравнения см .: What are the main disadvantages of Java Server Faces 2.0?

+0

Обратите внимание, что OP, похоже, уже имеет JSF2, по крайней мере, в classpathpath (эти аннотации bean в противном случае не были скомпилированы). – BalusC

+0

@Tarik Спасибо, что работает –

+0

@BalusC Да, я не обратил внимания на аннотации! Я просто видел тег и использовал JSP! – Tarik