Hi,
I'm facing an issue where the error count is wrong for a particular group when that group becomes irrelevant. What I have is a dropdown and depending on what value is selected, I may or maybe not have additional info. fields. The additional fields are rendered by having a group corresponding to each dropdown that is relevant depending on the dropdown choice. These fields have a bind associated with them depending on a type attribute. E.g. <xforms:bind nodeset="main/action-type-info/*[@type = 'number-list']" type="xs:string" constraint="matches(., '^([0-9]+){1}([,]{1}[0-9]+)*$')" required="true()" /> My problem is that the error-summary model still holds the errors for the additional info. fields even when that group becomes irrelevant. I feel like there's something missing in my understanding of how the error-summary gets updated. Any help would be much appreciated. Here is the code snippet: <div> <xforms:select1 id="my-input" ref="$instance/main/action-type" appearance="minimal"> <xforms:label class="rivetlogic-xforms-label" ref="$resources/asset/main/action-type/label" /> <xforms:itemset nodeset="xxforms:instance('action-types')/action-type"> <xforms:label ref="$resources/asset/main/action-type/dropdown-labels/*[name() = context()/@label-id]" /> <xforms:value ref="@value" /> </xforms:itemset> <xforms:alert ref="$resources/asset/main/action-type/alert" /> <xforms:hint clref="$resources/asset/main/action-type/hint" /> <!-- when the action type changes, delete the existing additional info (before adding the appropriate elements for the selected action type) --> <xforms:action ev:event="xforms-value-changed"> <xforms:delete nodeset="$instance/main/action-type-info/*" /> </xforms:action> <!-- add the additional info. elements to the descriptor instance for this dropdown option (note: the num-fields attribute value must match the number of field elements) --> <xforms:action ev:event="xforms-value-changed" while="(string(number(xxforms:instance('action-types')/*[@value = $instance/main/action-type]/@num-fields)) != 'NaN') and count($instance/main/action-type-info/*) lt (xxforms:instance('action-types')/*[@value = $instance/main/action-type]/@num-fields cast as xs:integer )"> <xforms:insert origin="xxforms:element(xxforms:instance('action-types')/*[@value = $instance/main/action-type]/field[@id=string(count($instance/main/action-type-info/*)+1)]/element-name, xxforms:attribute('type', xxforms:instance('action-types')/*[@value = $instance/main/action-type]/field[@id=string(count($instance/main/action-type-info/*)+1)]/type))" context="$instance/main/action-type-info" nodeset="*" /> </xforms:action> </xforms:select1> </div> <!-- action type info fields --> <xforms:repeat nodeset="xxforms:instance('action-types')/action-type"> <!-- create group for each action type, it is relevant when it is chosen in the dropdown --> <xforms:group ref=".[count($instance/main/action-type[text() = context()/@value]) > 0]"> <!-- number of additional info fields for this action type --> <xxforms:variable name="num-fields" select="context()/@num-fields cast as xs:integer" /> <!-- add the additional info. input fields to the form for this dropdown option (note: the num-fields attribute value must match the number of field elements) --> <xforms:repeat nodeset="(1 to $num-fields)"> <xxforms:variable name="i" select="." /> <div > <xforms:input ref="$instance/main/action-type-info/*[name() = (xxforms:instance('action-types')/*[@value= $instance/main/action-type]/field[@id=$i]/element-name)]" incremental="false" xxforms:maxlength="{xxforms:instance('action-types')/*[@value = $instance/main/action-type]/field[@id=$i]/maxlength}"> <xforms:label class="rivetlogic-xforms-label" ref="$resources/asset/main/action-type/additional-info-fields/*[name() = (xxforms:instance('action-types')/*[@value = $instance/main/action-type]/field[@id=$i]/element-name)]/label" /> <xforms:alert ref="$resources/asset/main/action-type/additional-info-fields/*[name() = (xxforms:instance('action-types')/*[@value = $instance/main/action-type]/field[@id=string($i)]/element-name)]/alert" /> <xforms:hint ref="$resources/asset/main/action-type/additional-info-fields/*[name() = (xxforms:instance('action-types')/*[@value = $instance/main/action-type]/field[@id=string($i)]/element-name)]/hint" /> </xforms:input> </div> </xforms:repeat> </xforms:group> </xforms:repeat> Thanks in advance, Sandra |
Just to follow up, I was pointed to this http://stackoverflow.com/questions/4370859/error-summary-component-with-repeat, where it looks like someone else faced the same issue.
I'm currently on 3.8.0 CE, but tested on the latest, 3.9.0 RC1 CE, and it fixed the problem. Thanks, Sandra |
Free forum by Nabble | Edit this page |