1

I have an ODK form that is configured to get a list of data from the database and use that list of data for the select.

Problem is that I am not able to display an error for when the query from the database returns an empty string, instead, ODK form crashes while loading. I have tried this,

<instance id="books">
    <list>
        <g:if test="${Book.list()}">
            <g:each in="${Book.list()}" var="book">
                <book>
                    <id>${book.id}</id>
                    <name>${book.name?.encodeAsHTML()}</name>
                </book>
            </g:each>
        </g:if>
        <g:else>
            <book>
                <id></id>
                <name></name>
            </book>
        </g:else>
    </list>
</instance>

which creates an xml with an empty id and empty name. This makes sure that the ODK doesn't crash when it loads.

But since I don't want the user the select an empty book option, I added a constraint in the bind nodeset section,

<bind nodeset="/form/book" type="string" required="true()" constraint=". != ''" jr:constraintMsg="Book must be not be empty"/>

So now when the user tries to get past the book selection section the ODK form doesn't allow it, but instead of throwing the constraint message that I supplied it throws this error

don't know xml value! perhaps selection was stored as index only and has not yet been linked up to a formdef?

4

0 回答 0