Details
-
Type: Bug
-
Status: Closed
-
Priority: Major
-
Resolution: Fixed
-
Affects Version/s: 1.6.1, 1.7, 1.7.1
-
Fix Version/s: 1.7.2
-
Component/s: ICE-Components
-
Labels:None
-
Environment:OS X 10.4.10
Eclipse 3.3.0
Java 5
-
ICEsoft Forum Reference:
-
Support Case References:
Description
When closing a panelCollapsible it seems to fire the actionListener two times.
Page:
<ice:form>
<ice:panelCollapsible actionListener="#{test.testAction}">
<f:facet name="header">
<ice:panelGroup>
<ice:outputText value="Header" />
</ice:panelGroup>
</f:facet>
<ice:panelGroup>
<ice:outputText value="Some test text" />
</ice:panelGroup>
</ice:panelCollapsible>
</ice:form>
Backing Bean:
public class Test {
private int _counter;
public Test(){
}
public void testAction(ActionEvent event) {
_counter++;
System.out.println("Count is " + _counter);
}
}
Page:
<ice:form>
<ice:panelCollapsible actionListener="#{test.testAction}">
<f:facet name="header">
<ice:panelGroup>
<ice:outputText value="Header" />
</ice:panelGroup>
</f:facet>
<ice:panelGroup>
<ice:outputText value="Some test text" />
</ice:panelGroup>
</ice:panelCollapsible>
</ice:form>
Backing Bean:
public class Test {
private int _counter;
public Test(){
}
public void testAction(ActionEvent event) {
_counter++;
System.out.println("Count is " + _counter);
}
}
Since I had some time on my hands, I wanted to take a quick look at why the panelCollapsible was behaving improperly. Here is what I have found. The method processDecodes calles super.processDecodes only when the component is in its "expanded" state. From what I see and understand from the documentation UIComponentBase.processDecodes calls the decode method of this component. There is an explicit call to the decode method on line 221. This is why is fires the actionListener two times. By moving the decode method call into the else block you eliminate the second call to the decode method.
--Chris