Problem with shopping cart design in XForms

i've got a problem designing a shopping cart in XForms. i hope some of 
the wizards might have a idea how to design such a form in XForms.

the requirements are as follows:
the user sees a simple list of articles (article-name, article-number, 
amount) and below two inputs (article-number,amount) for adding a new 
item to the list.

the behaviour should be as follows: the user supplies values to the 
inputs and hits 'add'-button. then the constraints (is article-number 
valid + is amount valid) should be checked and ONLY if valid inserted 
into the list.

the instance is as follows:
<articles>
	<article id="666001">
         	<article-name>gr?atze</article-name>
         	<orderamount>3</orderamount>
	</article>
         <article id="677033">
         	<article-name>lange Goppels</article-name>
         	<orderamount>1</orderamount>
         </article>
         <article id="666031">
         	<article-name>schwere Hutze</article-name>
         	<orderamount>23</orderamount>
         </article>
</articles>
<add articlenummer="" orderamount=""/>

here the problem : is there a way to insert the new item only if its valid?

i'm running out of ideas - any help greatly appreaciated.

Joern Turner

i've attached the complete source for a deeper look.
<?xml version="1.0" encoding="iso-8859-1"?>
<envelope xmlns:chiba="http://chiba.sourceforge.net/2001/09/xforms"
    chiba:css-style="ic3i.css" chiba:id="address" chiba:name="ShoppingCart"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns:xforms="http://www.w3.org/2002/08/xforms/cr"
    >
    <xforms:model xforms:id="shoppingcart">
        <xforms:submission xforms:id="submission-1"	xforms:action="dom:/prototype/shoppingcart" xforms:replace="instance" xforms:method="post"/>

        <xforms:bind xforms:id="bind-customer-article-name" xforms:nodeset="/shoppingcart/customer/article-name"/>

        <xforms:bind xforms:id="bind-article" xforms:nodeset="/shoppingcart/articles/article">
	        <xforms:bind xforms:id="bind-article-id" xforms:nodeset="@id" xforms:type="integer" xforms:constraint="number(./text()) > 100"/>
	        <xforms:bind xforms:id="bind-article-article-name" xforms:nodeset="article-name" xforms:type="string"/>
	        <xforms:bind xforms:id="bind-article-orderamount" xforms:nodeset="orderamount" xforms:type="integer" xforms:constraint="number(./text()) > 0"/>
	    </xforms:bind>

        <xforms:bind xforms:id="bind-add-articlenummer" xforms:nodeset="/shoppingcart/add/@articlenummer" xforms:type="integer"/>
        <xforms:bind xforms:id="bind-add-orderamount" xforms:nodeset="/shoppingcart/add/@orderamount" xforms:type="integer"/>

        <xforms:instance>
        	<!-- shoppingcart -->
            <shoppingcart>
            	<customer id="99">
            		<name>Testcustomer</name>
            	</customer>

            	<articles>
            		<article id="666001">
            			<article-name>gr?atze</article-name>
            			<orderamount>3</orderamount>
            		</article>
            		<article id="677033">
            			<article-name>lange Goppels</article-name>
            			<orderamount>1</orderamount>
            		</article>
            		<article id="666031">
            			<article-name>schwere Hutze</article-name>
            			<orderamount>23</orderamount>
            		</article>
            	</articles>

            	<add articlenummer="" orderamount=""/>

            </shoppingcart>

        </xforms:instance>

    </xforms:model>
    <body>
    <chiba:form>
    	<xforms:group>
    		<xforms:output xforms:id="out-1" xforms:bind="bind-customer-name">
    			<xforms:label xforms:id="label-1">Customername: </xforms:label>
    		</xforms:output>

			<table>
				<tr>
					<td><b>ArticleNumber</b></td>
					<td><b>Article-Name</b></td>
					<td><b>Amount</b></td>
					<td></td>
				</tr>
	    		<xforms:repeat xforms:id="repeat-1" xforms:bind="bind-article">
	    			<tr>
	    				<td>
							<xforms:output xforms:id="out-2" xforms:bind="bind-article-id">
								<xforms:alert xforms:id="alert-1">Articlenumber?/xforms:alert>
							</xforms:output>
	    				</td>
	    				<td>
							<xforms:output xforms:id="out-3" xforms:bind="bind-article-article-name"/>
	    				</td>
	    				<td>
							<xforms:input xforms:id="in-1" xforms:bind="bind-article-orderamount">
								<xforms:alert xforms:id="alert-2">Amount must be greater than 1</xforms:alert>
							</xforms:input>
	    				</td>
		    			<td>
							<!--
		    				<xforms:extension><chiba:selector/></xforms:extension>
		    				-->
		    			</td>
					</tr>
	    		</xforms:repeat>
	    		<tr>
	    			<td>
						<xforms:input xforms:id="in-2" xforms:bind="bind-add-articlenummer"/>
	    			</td>
	    			<td>
	    			</td>
	    			<td>
						<xforms:input xforms:id="in-3" xforms:bind="bind-add-orderamount"/>
	    			</td>
	    			<td>
			            <xforms:trigger xforms:id="trigger-1">
			                <xforms:label xlink:href="images/add_new.gif">Einf?xforms:label>
			                <xforms:action xforms:id="action-1">
			                	<xforms:revalidate />
			                    <xforms:insert xforms:id="insert-1" xforms:nodeset="/shoppingcart/articles/article" xforms:at="xforms:count('article')" xforms:position="after"/>
			                    <xforms:setValue xforms:id="setvalue-1" xforms:ref="/shoppingcart/articles/article[xforms:count('article')]/@id" xforms:value="/shoppingcart/add/@articlenummer"/>
			                    <xforms:setValue xforms:id="setvalue-2" xforms:ref="/shoppingcart/articles/article[xforms:count('article')]/orderamount" xforms:value="/shoppingcart/add/@orderamount"/>
			                    <xforms:setValue xforms:id="setvalue-3" xforms:ref="/shoppingcart/add/@articlenummer" xforms:value="''"/>
			                    <xforms:setValue xforms:id="setvalue-4" xforms:ref="/shoppingcart/add/@orderamount" xforms:value="''"/>
			                </xforms:action>
			            </xforms:trigger>
	    			</td>
	    		</tr>
			</table>

    	</xforms:group>

		<xforms:trigger xforms:id="trigger-3">
			<xforms:label xforms:id="label-7">îderungen speichern</xforms:label>
			<xforms:action xforms:id="action-3">
				<xforms:send xforms:id="send-1" xforms:submission="submission-1"/>
			</xforms:action>
		</xforms:trigger>

    </chiba:form>
    </body>
</envelope>

Received on Friday, 21 February 2003 18:18:52 UTC