Seam framework Cheat Sheets 2. SelectOneMenu example
Example usage of SelectOneMenu In this example i want to use selectOneMenu to select a country from list of countries and save the country code for the user in USER_ACCOUNT table.
<h:selectOneMenu id="country" value="#{userForm.countryCode}" require="true">
<s:selectItems value="#{countries.list}" var="country" label="#{country.countryName}"/>
<s:convertEntity/>
</h:selectOneMenu>
In the above code “userForm.countryCode” refers to model “UserForm” with property countryCode, The helper class to load countries list is as follows , the scope is application as the countries and their code doesn’t change.
@Name("countries")@Scope(ScopeType.APPLICATION)
public class CountriesList {
@Outprivate List<country> list;
@In(create=true) EntityManager entityManager;
@Factory("countriesList")
public List<country> getList() {
Query query=entityManager.createNamedQuery("Country.findAll");
list=query.getResultList();
return list;
}
public void setCountriesList(List<country> list) {
this.list = list;
}
}
Entity class Country is as follows,
@Entity@Name("country")@Table(name = "COUNTRY")
@NamedQueries({@NamedQuery(name = "Country.findAll", query = "SELECT c FROM Country c ORDER BY c.countryName"), @NamedQuery(name = "Country.findByCountryCode", query = "SELECT c FROM Country c WHERE c.countryCode = :countryCode"), @NamedQuery(name = "Country.findByCountryName", query = "SELECT c FROM Country c WHERE c.countryName = :countryName")})
public class Country extends Model implements Serializable {private static final long serialVersionUID = 1L;
@Id@Column(name = "COUNTRY_CODE", nullable = false)
private String countryCode;@Column(name = "COUNTRY_NAME", nullable = false)
private String countryName;
public Country() {}
public Country(String countryCode) {
this.countryCode = countryCode;
}
public Country(String countryCode, String countryName) {
this.countryCode = countryCode;
this.countryName = countryName;
}
public String getCountryCode() {
return countryCode;
}
public void setCountryCode(String countryCode) {
this.countryCode = countryCode;
}
public String getCountryName() {
return countryName;
}public void setCountryName(String countryName) {
this.countryName = countryName;
}
}