This looks ok to me. Can you try simplifying the test case, like
1. always have the second selectOneChoice enabled
2. try seeing what immediate does
3. Yes, the projectChangeListener should not be needed.
4. get rid of all fields but the not working selectOneChoice. does that
work?
Jean-Noël Colin wrote, On 2/12/2010 8:08 AM PT:
Hi
I've been working with JSF & IceFaces, but rather new to MyFaces + Trinidad.
And I'm facing a problem with autoSubmit.
Basically, I have two selectOneChoice elements (project and subproject), and
the second should be disabled until the first one has been selected. In the
same form, I also have a few other fields that are marked as required and need
some further validation.
The problem I have is the following: when I select an item in the first selectOneChoice, the second becomes enabled. So far so good... So I fill in the other fields and click the 'add' button. The problem is that the selected value in the second selectOneChoice (#{entryBean.currentLine.subProjectId}) does not get pushed to the backing bean, while the two others are. I can see that when the addAction method is fired; only projectId and activityId return the right value, subprojectid is always 0.
The first selectOneChoice is marked as immediate to bypass the validation
controls. I have also attached a valueChangeListener (projectChangeListener) to
it so that the value gets stored in the backing bean (btw, why isn't that done
automatically?)
Am I doing something wrong or is this a know issue? I don't think my case is
really unusual...
Thanks a lot for your help
Jean-Noël Colin
public String addAction() {
System.out.println("Add action called");
System.out.println(currentLine.getProjectId());
System.out.println(currentLine.getSubProjectId());
System.out.println(currentLine.getActivityId());
return null;
}
public void projectChangeListener(ValueChangeEvent event) {
System.out.println("new project: " + event.getOldValue() + ":"
+ event.getNewValue());
System.out.println(currentLine.getSubProjectId());
currentLine.setProjectId((Long) event.getNewValue());
<tr:panelHeader text="Hello world">
<tr:panelGroupLayout>
<tr:chooseDate id="dateChooser"></tr:chooseDate>
<tr:separator />
<tr:panelFormLayout>
<tr:inputDate id="dateField" chooseId="dateChooser"
label="Day"
value="#{entryBean.currentLine.lineDate}"></tr:inputDate>
<tr:inputText label="#hours" columns="3"
required="true"
showRequired="true"
value="#{entryBean.currentLine.lineHours}">
</tr:inputText>
<tr:selectOneChoice id="project" label="project"
value="#{entryBean.currentLine.projectId}"
required="true"
showRequired="true" autoSubmit="true"
unselectedLabel="Select"
immediate="true"
valueChangeListener="#{entryBean.projectChangeListener}">
<f:selectItems
value="#{globalData.activeprojects}" />
</tr:selectOneChoice>
<tr:selectOneChoice id="subproject"
label="sub-project"
partialTriggers="project"
value="#{entryBean.currentLine.subProjectId}"
required="true"
showRequired="true"
unselectedLabel="Select"
disabled="#{entryBean.currentLine.projectId eq
0}">
<f:selectItems
value="#{globalData.activeprojects}" />
</tr:selectOneChoice>
<tr:outputText
value="#{entryBean.currentLine.projectId}"
partialTriggers="project" />
<tr:selectOneChoice label="activity"
value="#{entryBean.currentLine.activityId}"
required="true"
showRequired="true"
unselectedLabel="Select">
<f:selectItems
value="#{globalData.activities}" />
</tr:selectOneChoice>
<tr:inputText label="Comment" required="true"
showRequired="true">
</tr:inputText>
<tr:panelButtonBar halign="center">
<tr:commandButton text="Add"
action="#{entryBean.addAction}" />
<tr:resetButton text="Cancel" />
</tr:panelButtonBar>
</tr:panelFormLayout>
</tr:panelGroupLayout>
</tr:panelHeader>