[jboss-user] [JBoss Seam] - Another h:selectOneMenu and valueChangeListener problem...
ElNino
do-not-reply at jboss.com
Sun Nov 4 08:56:52 EST 2007
Hello,
I am relatively new with JBoss technologies; I spent a lot of time reading books and posts but I spent several days on a very simple thing; others people have already explain the same problem on the forum but the proposed solutions are not working for me.
My post is quite long cause I prefer giving you a complete presentation of my problem.
I'am using
jBoss Seam 2.0.0.CR2
with jboss-4.2.1.GA
I will take a simple example :
I have:
- a continent entity
- a country entity
Of course, continent contains serveral countries and a country is attached to a continent :
| @Entity
| @Name("continent")
| @Table(name = "Continents")
| public class Continent extends PersistentEntity implements Serializable {
|
| private static final long serialVersionUID = 1L;
| private long id;
| private Set<Country> countries;
| private String name;
|
| public Continent() { }
|
| public Continent(String name) {
| this.name = name;
| }
|
| @Id
| @GeneratedValue
| public long getId() {
| return id;
| }
|
| public void setId(long id) {
| this.id = id;
| }
|
| public String getName() {
| return name;
| }
|
| public void setName(String name) {
| this.name = name;
| }
|
| @OneToMany
| public Set<Country> getCountries() {
| return countries;
| }
|
| public void setCountries(Set<Country> countries) {
| this.countries = countries;
| }
|
| @Entity
| @Name("country")
| @Table(name="Countries")
| public class Country extends Location implements Serializable {
|
| private static final long serialVersionUID = 1L;
| private long id;
| private Continent continent;
| private Set<Region> regions;
|
| @Id
| @GeneratedValue
| public long getId() {
| return id;
| }
|
| public void setId(long id) {
| this.id = id;
| }
|
| @OneToMany
| public Set<Region> getRegions() {
| return regions;
| }
|
| public void setRegions(Set<Region> regions) {
| this.regions = regions;
| }
|
| @ManyToOne
| public Continent getContinent() {
| return continent;
| }
|
| public void setContinent(Continent continent) {
| this.continent = continent;
| }
|
Now I have a XHTML page with <h:selectOneMenu items.
The first list all the continents, and on the selection of a continent, I would like to enable the country select box and refreshing it with the countries located in the selected continent.
I read a lot of documents but I can't manage to get a response on value selection.
I have the xHTML form :
| <h:form id="creationForm">
| <h:outputText value="Continent: " />
| <h:outputText value="No continent"
| rendered="#{creationAction.getNumberOfPossibleContinents()==0}" />
|
| <h:selectOneMenu value="#{creationAction.selectedContinent}"
| valueChangeListener="#{creationAction.continentChangeEvent}"
| onchange="this.form.submit()"
| rendered="#{creationAction.getNumberOfPossibleContinents()>0}">
|
| <s:selectItems
| value="#{creationAction.getPossibleContinentsList()}"
| var="selectedContinent" noSelectionLabel="Please Select..." />
| <s:convertEntity />
| </h:selectOneMenu>
| </h:form>
|
creationAction is defines like this
| @Stateful
| @Name("creationAction")
| @Scope(ScopeType.SESSION)
| public class creationAction implements ICreation {
|
| private Continent selectedContinent;
| private List<Continent> possibleContinentsList;
|
| @PersistenceContext(type = EXTENDED)
| private EntityManager entityManager;
|
| public void cancelCreation() {
| }
|
| @Remove
| @End
| public void confirmCreation() {
| System.out.println("CONFIRM");
| }
|
| @SuppressWarnings("unchecked")
| public List<Continent> getPossibleContinentsList() {
| possibleContinentsList = entityManager
| .createQuery("from Continent row").getResultList();
|
| return possibleContinentsList;
| }
|
| public void addContinent(Continent continent) {
| }
|
| public Continent getSelectedContinent() {
| return null;
| }
|
| public void setSelectedContinent(Continent continent) {
| System.out.println("Set...");
| }
|
| public int getNumberOfPossibleContinents() {
| int result = 0;
|
| if (possibleContinentsList != null) {
| result = possibleContinentsList.size();
| } else {
| result = getPossibleContinentsList().size();
| }
|
| return result;
| }
|
| public void continentChangeEvent(ValueChangeEvent event) {
| System.out.println("Event : " + event);
| System.out.println("New value : " + event.getNewValue());
| }
|
With the interface :
| @Local
| public interface ICreation {
|
| public void confirmCreation();
|
| public void cancelCreation();
|
| public List<Continent> getPossibleContinentsList();
|
| public void addContinent(Continent continent);
|
| public Continent getSelectedContinent();
|
| public void setSelectedContinent(Continent continent);
|
| public int getNumberOfPossibleContinents();
|
| public void continentChangeEvent(ValueChangeEvent event);
|
The continent list is displayed but continentChangeEvent method is never called !
In the debug console (when I select a continent ...) :
13:52:22,098 INFO [lifecycle] WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=creationForm:j_id19[severity=(ERROR 2), summary=(value is not valid), detail=(value is not valid)]
Any ideas ?
I'am of course free for answer to all your questions ?
Thanks for your help !
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4101575#4101575
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4101575
More information about the jboss-user
mailing list