Hi, I have a problem when I try to call my index page that contain 7 custom
components. One of them is a login component. this component generates a
org.apache.tapestry.util.xml.DocumentParseException that says:

Unable to read context:/WEB-INF/components/Login.jwc: Document root element
"component-specification", must match DOCTYPE root "page-specification".

It also point out that the error are in my Login.jwc file:

context:/WEB-INF/components/Login.jwc, line 5, column 42
1       <?xml version="1.0"?>
2       <!DOCTYPE page-specification PUBLIC "-//Apache Software
Foundation//Tapestry Specification 4.0//EN"
3       "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd";>
4       
5       <component-specification allow-body="no">
6       <description>It renders a login form or a change password
form.</description>
7       
8       <!-- LOGIN FORM -->
9       <component id="loginForm" type="Form" >
10      <binding name="listener" value="listener:onLogin" />

I see no error in this file, and if I try to open the file in my web browser
the entire file is opened so I guess that there is no XML error in th e
file. 

Does anybody know how to solve this error?

the entire Login.jwc look like this:
<?xml version="1.0"?>
<!DOCTYPE page-specification PUBLIC "-//Apache Software Foundation//Tapestry
Specification 4.0//EN"
        "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd";>
                
<component-specification allow-body="no">
        <description>It renders a login form or a change password
form.</description>
        
        <!-- LOGIN FORM  -->    
                <component id="loginForm" type="Form" >
                        <binding name="listener" value="listener:onLogin" />
                        <binding name="delegate" value="beans.delegate" />
                </component>
        
                <!-- INPUT BOXES -->
                <component id="inputUsername" type="TextField" >
                <binding name="value" value="userName" />    
                <binding name="displayName" value="literal:Username"/>
                <binding name="validators" 
value="validators:required,minLength=5" />
            </component>
            
            <component id="inputPassword" type="TextField">
                        <binding name="value" value="password" /> 
                        <binding name="hidden" value="true" />
                <binding name="displayName" value="literal:Password"/>
                <binding name="validators" 
value="validators:required,minLength=5"
/>
            </component>
            
            <!-- LABELS -->
            <component id="userNameLabel" type="FieldLabel" >
                <binding name="field" value="component:inputUsername" />
            </component>
            
            <component id="passwordLabel" type="FieldLabel" >
                <binding name="field" value="component:inputPassword" />
            </component>
        
                <!-- VALIDATION -->
                <property name="loginCurrentFieldTracking" />
                
                <component id="loginErrors" type="For" >
                        <binding name="source" 
value="beans.delegate.fieldTracking" />
                        <binding name="value" value="loginCurrentFieldTracking" 
/>
                </component>
                
                <component id="loginError" type="Delegator" >
                        <binding name="delegate" 
value="loginCurrentFieldTracking.errorRenderer"
/>
                </component>
                
                <component id="loginIsInError" type="If">
                        <binding name="condition" 
value="loginCurrentFieldTracking.inError" />
                </component>
        
        <!-- CHANGE PASSWORD FORM  -->  
                <component id="changePasswordForm" type="Form" >
                        <binding name="listener" 
value="listener:onChangePassword" />
                        <binding name="delegate" value="beans.delegate" />
                </component>
        
                <!-- INPUT BOXES -->
                <component id="inputOldPassword" type="TextField" >
                <binding name="value" value="oldPassword" />
                <binding name="hidden" value="true" />    
                <binding name="displayName" value="literal:Old Password"/>
                <binding name="validators" 
value="validators:required,minLength=5" />
            </component>
            
            <component id="inputNewPassword" type="TextField">
                        <binding name="value" value="newPassword" /> 
                        <binding name="hidden" value="true" />
                <binding name="displayName" value="literal:New Password"/>
                <binding name="validators" 
value="validators:required,minLength=5"
/>
            </component>
            
            <component id="inputConfirmNewPassword" type="TextField">
                        <binding name="value" value="confirmNewPassword" /> 
                        <binding name="hidden" value="true" />
                <binding name="displayName" value="literal:Confirm New 
Password"/>
                <binding name="validators" 
value="validators:required,minLength=5"
/>
            </component>
            
            <!-- LABELS -->
            <component id="oldPasswordLabel" type="FieldLabel" >
                <binding name="field" value="component:inputOldPassword" />
            </component>
            
            <component id="newPasswordLabel" type="FieldLabel" >
                <binding name="field" value="component:inputNewPassword" />
            </component>
            
            <component id="confirmNewPasswordLabel" type="FieldLabel" >
                <binding name="field" value="component:inputConfirmNewPassword" 
/>
            </component>
        
                <!-- VALIDATION -->
                <property name="changePasswordCurrentFieldTracking" />
                
                <component id="changePasswordErrors" type="For" >
                        <binding name="source" 
value="beans.delegate.fieldTracking" />
                        <binding name="value" 
value="changePasswordCurrentFieldTracking" />
                </component>
                
                <component id="changePasswordError" type="Delegator" >
                        <binding name="delegate"
value="changePasswordCurrentFieldTracking.errorRenderer" />
                </component>
                
                <component id="changepasswordIsInError" type="If">
                        <binding name="condition"
value="changePasswordCurrentFieldTracking.inError" />
                </component>
        
</component-specification>


Thanks
Jacob
-- 
View this message in context: 
http://www.nabble.com/Problem-with-one-of-my-Custom-Components-tf2411939.html#a6723285
Sent from the Tapestry - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to