2014-09-09 3 views
0

Ниже мой управляемый код боб:JSF проблема с Скоупсом

public class SelectEntries implements Serializable { 

private static final long serialVersionUID = 1217595612573680L; 

private List<SelectEntry> selectEntries = new ArrayList<SelectEntry>(); 

private SelectEntry selectEntry; 

@PostConstruct 
private void init() { 
    selectEntries.add(new SelectEntry("1001", new CheckEntry("Line 1"), 
      new CheckEntry("Line 2"), new CheckEntry("Line 3"))); 
    selectEntries.add(new SelectEntry("1002", new CheckEntry("Line 4"), 
      new CheckEntry("Line 5"), new CheckEntry("Line 6"))); 
    selectEntries.add(new SelectEntry("1003", new CheckEntry("Line 7"), 
      new CheckEntry("Line 8"), new CheckEntry("Line 9"))); 
} 

public List<SelectEntry> getSelectEntries() { 
    return selectEntries; 
} 

public void setSelectEntries(List<SelectEntry> selectEntries) { 
    this.selectEntries = selectEntries; 
} 

public SelectEntry getSelectEntry() { 
    return selectEntry; 
} 

public void setSelectEntry(SelectEntry selectEntry) { 
    this.selectEntry = selectEntry; 
} 

public String getTemplatesString() { 

    String templatesString = ""; 
    for (CheckEntry oneCheckEntry : getSelectEntry().getCheckEntries()) { 
     if (oneCheckEntry.getCheck()) { 
      templatesString += oneCheckEntry.getName(); 
     } 
    } 

    return templatesString; 
} 
} 

Вот класс SelectEntry:

public class SelectEntry implements Serializable { 

private static final long serialVersionUID = 7298341984562171094L; 

private String name; 

private List<CheckEntry> checkEntries = new ArrayList<CheckEntry>(); 

public SelectEntry(String name, CheckEntry... checkEntries) { 
    this.name = name; 
    if (checkEntries != null) { 
     this.checkEntries.addAll(Arrays.asList(checkEntries)); 
    } 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public List<CheckEntry> getCheckEntries() { 
    return checkEntries; 
} 

public void setCheckEntries(List<CheckEntry> checkEntries) { 
    this.checkEntries = checkEntries; 
} 

@Override 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + ((name == null) ? 0 : name.hashCode()); 
    return result; 
} 

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

} 

А класс CheckEntry:

public class CheckEntry implements Serializable { 

private static final long serialVersionUID = 1730874183104100662L; 

private String name; 

private Boolean check; 

public CheckEntry(String name) { 
    this.name = name; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public Boolean getCheck() { 
    return check; 
} 

public void setCheck(Boolean check) { 
    this.check = check; 
} 

} 

У меня есть простой функцию в управляемом компоненте, чтобы получить создание строки, на основе которой были выбраны проверочные записи. Это только функции с SessionScope и если я использую RequestScope, логические значения CheckEntries равны null, и я получаю ошибку времени выполнения. Почему это так?

+0

Вы пробовали использовать 'ViewScope'? –

+0

С ViewScope содержимое ajax не отображается вообще – user1107888

+0

Этого не должно было случиться. ViewScope работает с ajax. Я бы искал причину, почему он не работает с ViewScope, потому что RequestScope бесполезен в этом случае. –

ответ

0

В соответствии с JEE7 учебник:

Запрос (@RequestScoped): Запрос Объем сохраняется в течение одного запроса HTTP в веб-приложения. В приложении типа hello1, где приложение состоит из одного запроса и ответа, компонент использует область запроса.

Таким образом, как только ваша страница будет загружена, бэк-бэк-брейк, полученный с помощью запроса, исчезнет для последующих взаимодействий (даже ajax).

Следует отметить, что рекомендуется использовать области видимости из пакета javax.enterprise.context Для вашего приложения выглядит как минимальная область видимости - ViewScope. Поскольку javax.enterprise.context не реализует область видимости, вы можете использовать Omnifaces.

Смежные вопросы