I have an <h:form> which contains two <h:selectOneMenu> elements. These
elements are being populated programatically with a <f:selectItems> tied to
a JSF managed bean which returns List<SelectItem>. Unfortunately, when I
attempt to click the <h:commandButton> to invoke an action, the action does
not get processed. I receive no error message, it just fails silently. If
I remove the <h:selectOneMenu> elements from the code, the action is
processed fine. Here are some code snippets:
JSP Code for the Form:
<h:form id="status">
<p>Today, I'm working at
<h:selectOneMenu value="#{event.placeId}">
<f:selectItem itemLabel="-- Select a location --" />
<f:selectItems value="#{place.placeOptions}"/>
</h:selectOneMenu>
from
<h:selectOneMenu id="startTime" value="#{event.start}">
<f:selectItems value="#{event.possibleStartTimes}"/>
</h:selectOneMenu>
to
<h:selectOneMenu id="endTime" value="#{event.finish}">
<f:selectItems value="#{event.possibleFinishTimes}"/>
</h:selectOneMenu>
<h:commandButton action="#{event.createEventAction}"
value="Mowork"/>
</p>
</h:form>
Managed Bean methods to Populate Menu Items:
private List<SelectItem> selectItemsFromTimeRange(Calendar begin, Calendar
end)
{
List<SelectItem> items = new ArrayList<SelectItem>();
while(begin.compareTo(end) < 0)
{
items.add(new SelectItem(
new Long(begin.getTimeInMillis()).toString(),
timeFormat.format(begin.getTime())
));
begin.add(Calendar.MINUTE, 15);
}
return items;
}
public List<SelectItem> getPossibleStartTimes()
{
Calendar time =
Calendar.getInstance(TimeZone.getTimeZone("America/Chicago"));
List<SelectItem> items = new ArrayList<SelectItem>();
items.add(new SelectItem(
timeFormat.format(time.getTime()),
"Right Now"
));
Calendar begin = (Calendar)time.clone();
begin.add(Calendar.MINUTE, 1);
if(begin.get(Calendar.MINUTE)%15 != 0)
begin.add(Calendar.MINUTE, 15-(begin.get(Calendar.MINUTE)%15));
Calendar end = (Calendar)begin.clone();
end.add(Calendar.HOUR, 24);
items.addAll(selectItemsFromTimeRange(begin, end));
return items;
}
public List<SelectItem> getPossibleFinishTimes()
{
Calendar begin =
Calendar.getInstance(TimeZone.getTimeZone("America/Chicago"));
begin.add(Calendar.MINUTE, 15);
if(begin.get(Calendar.MINUTE)%15 != 0)
begin.add(Calendar.MINUTE, 15-(begin.get(Calendar.MINUTE)%15));
Calendar end = (Calendar)begin.clone();
end.add(Calendar.HOUR, 24);
return selectItemsFromTimeRange(begin, end);
}
Managed Bean method to Process Action:
public String createEventAction()
{
System.out.println("create event action is running");
return "createEventSuccess";
}
The full codebase for working and non-working versions can also be found
here:
http://trac.assembla.com/moworking/browser/branches/CreateEventActionWorkingWithNoSelectItems?rev=63
http://trac.assembla.com/moworking/browser/branches/CreateEventActionNotWorkingWithSelectItems?rev=65
Please let me know if you have any suggestions.
Environment
===
MyFaces Core 1.2.3
MyFaces Tomahawk 1.1.6
Apache Geronimo 2.1.2 (Tomcat)
Java HotSpot 1.5.0 64-bit Server VM
Apple Mac OS X 10.5 (Leopard)
Thanks,
- C
--
View this message in context:
http://www.nabble.com/commandbutton-action-not-being-invoked-if-form-contains-programatically-defined-selectitems-tp19131952p19131952.html
Sent from the MyFaces - Users mailing list archive at Nabble.com.