Предположим, у меня есть форму студента.xhtml, у которой есть радиолисты & dropdownmenu, населенный от @ManagedBean Student()
. Как вы знаете, для заполнения формы из managedbean мне нужно иметь List<Object>
полей в классе Student
. Но я также хочу, чтобы мой класс Студента был чистым, он должен иметь поля, относящиеся только к себе, не возможные значения, которые он может получить (я имею в виду список <>). Поэтому я хочу отделить мой класс Student
от @ManagedBean
. Таким образом, у меня будет два класса в конце, один из которых - чистый класс Student и класс StudentBean, который контролирует представление.JSF-управляемые бобы и образцы дизайна
Итак, мой вопрос в том, что хорошая практика имеет два класса, как показано ниже, или я должен идти с одним классом? Метод двух классов дублирует поля, поэтому я не знаю, влияет ли это на производительность в плохом состоянии. Что вы предлагаете?
Не требуется BeanClassWithStudent Pattern;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.*;
@ManagedBean
public class Student {
private String firstName;
private String lastName;
private String country;
private String favLanguage;
private List<String> countryList;
private List<String> favLanguageList;
@PostConstruct // generate DropDownList Combobox and radiobuttons From class fields
public void init() {
generateCountries();
generateFavLanguages();
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getFavLanguage() {
return favLanguage;
}
public void setFavLanguage(String favLanguage) {
this.favLanguage = favLanguage;
}
public List<String> getCountryList() {
return countryList;
}
public List<String> getFavLanguageList() {
return favLanguageList;
}
private void generateCountries(){
countryList = new ArrayList<>();
countryList.add("Turkey");
countryList.add("France");
countryList.add("Senegal");
countryList.add("USA");
}
private void generateFavLanguages(){
favLanguageList = new ArrayList<>();
favLanguageList.add("Java");
favLanguageList.add("Ruby");
favLanguageList.add("C++");
favLanguageList.add("Visual Basic");
}
}
Мои хотел раздельные классы; Student.class
public class Student {
private String firstName;
private String lastName;
private String country;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
Требуются StudentControllerBean;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.*;
@ManagedBean
public class StudentBean {
private String firstName;
private String lastName;
private String country;
private List<String> countryList;
private List<String> favLanguageList;
@PostConstruct // generate DropDownList Combobox and radiobuttons From class fields
public void init() {
generateCountries();
generateFavLanguages();
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public List<String> getCountryList() {
return countryList;
}
public List<String> getFavLanguageList() {
return favLanguageList;
}
private void generateCountries(){
countryList = new ArrayList<>();
countryList.add("Turkey");
countryList.add("France");
countryList.add("Senegal");
countryList.add("USA");
}
private void generateFavLanguages(){
favLanguageList = new ArrayList<>();
favLanguageList.add("Java");
favLanguageList.add("Ruby");
favLanguageList.add("C++");
favLanguageList.add("Visual Basic");
}
}
@ javaguy У меня его нет, это вопрос шаблона дизайна. –
читайте это по адресу: http://stackoverflow.com/questions/7223055/making-distinctions-between-different-kinds-of-jsf-managed-beans/7223910#7223910 и http://stackoverflow.com/questions/13011392/jsf-service-layer и http://stackoverflow.com/questions/30639785/jsf-controller-service-and-dao, из которых это дубликат. – Kukeltje
@Kukeltje Это не дубликат, это совершенно другой вопрос.Другие говорят о 2 отдельных классах bean, в то время как я говорю один класс контроллера и один класс чистого объекта. –