You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by samlai <sy...@gmail.com> on 2008/03/04 08:15:29 UTC

Autocomplete Using Selection as Criteria

I have an autocomplete textfield.  I'd like the retrieved autocomplete list
to be based from a selection field in addition to the autocomplete
textfield.  I'm not sure how I can feed the current server region selection
to onProvideCompletionsFromServerNameField, serverRegionField is null before
submit.  Thanks.

NewUser.java
==========
public class NewUser {
...
	private String serverRegionField;
	private String serverNameField;

	@Component(id = "serverNameField")
	@Mixins("Autocomplete")
	private TextField serverNameText;

	String[] onProvideCompletionsFromServerNameField(String input) {
		Dao dao = Dao.getRequestInstance(requestGlobals);
		Query query = dao.createNamedQuery("findServerNameLikeForRegion");
		query.setParameter("name", input + "%");
		query.setParameter("region", serverRegionField);

		List<String> serverNameList = (List<String>) query.getResultList();
		return serverNameList.toArray(new String[serverNameList.size()]);
	}
...
}


NewUser.tml
=========

<div id="newUserView" class="mainpost">
		<t:form t:id="newUserForm">
			<t:errors />
			
			<div class="t-beaneditor">
				<div class="t-beaneditor">
					<div class="t-beaneditor-row">
						<t:label for="emailField" />
						<t:textfield t:id="emailField" t:validate="required,regexp" size="30"
/>
					</div>
					<div class="t-beaneditor-row">
						<t:label for="serverRegionField" />
						<t:select t:id="serverRegionField" t:model="literal:US,EU"
t:validate="required"/>
					</div>
					<div class="t-beaneditor-row">
						<t:label for="serverNameField" />
						<t:textfield t:id="serverNameField" t:validate="required" size="30"/>
					</div>
					<div class="t-beaneditor-row">
				    	<t:submit t:id="registerButton" value="Register"/>
					</div>
			    </div>
		    </div>
	    </t:form>
    </div>
-- 
View this message in context: http://www.nabble.com/Autocomplete-Using-Selection-as-Criteria-tp15821577p15821577.html
Sent from the Tapestry - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: AW: Autocomplete Using Selection as Criteria

Posted by samlai <sy...@gmail.com>.
Just want to share my solution.  I don't like to do
"onchange='this.form.submit()'" on t:select input, because that can trigger
early validation errors before the user is actually ready to submit the
form.  Also, by default the first element in t:select is selected, onchange 
only triggers when the user actually changes the selection.  If the user is
fine with the default selection, onchange event would never trigger, but I
still need to use it as a criteria.  I finally reach the following solution
that I'm happy with.

NewUser.java
==========
public class NewUser {
...
        @Persist
        private String serverRegionField;
        private String serverNameField;

        void onActionFromServerRegionFieldLink(String context) {
		setServerRegionField(context);
	}

        String[] onProvideCompletionsFromServerNameField(String input) {
                Dao dao = Dao.getRequestInstance(requestGlobals);
                Query query =
dao.createNamedQuery("findServerNameLikeForRegion");
                query.setParameter("name", input + "%");
                query.setParameter("region", serverRegionField);

                List<String> serverNameList = (List<String>)
query.getResultList();
                return serverNameList.toArray(new
String[serverNameList.size()]);
        }
...
} 

NewUser.tml
=========

    <div id="newUserView" class="mainpost">
                <t:form t:id="newUserForm">
                        <t:errors />
                       
                        <div class="t-beaneditor">
                                <div class="t-beaneditor">
                                        <div class="t-beaneditor-row">
                                                <t:label for="emailField" />
                                                <t:textfield
t:id="emailField" t:validate="required,regexp" size="30"/>
                                        </div>
                                        <div class="t-beaneditor-row">
						<t:actionlink t:id="serverRegionFieldLink"/>
						<t:label for="serverRegionField" />
						<t:select t:id="serverRegionField" t:model="literal:US,EU"
t:validate="required" />
					</div>
					<div class="t-beaneditor-row">
						<t:label for="serverNameField" />
						<t:textfield t:id="serverNameField" t:mixins="autocomplete"
t:validate="required" size="30"
						onfocus="javascript:new
Ajax.Request(document.getElementById('serverRegionFieldLink').href + '/' +
document.getElementById('serverRegionField').value)"/>
					</div>
                                        <div class="t-beaneditor-row">
                                    <t:submit t:id="registerButton"
value="Register"/>
                                        </div>
                            </div>
                    </div>
            </t:form>
    </div> 
-- 
View this message in context: http://www.nabble.com/Autocomplete-Using-Selection-as-Criteria-tp15821577p15841150.html
Sent from the Tapestry - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


AW: Autocomplete Using Selection as Criteria

Posted by "Stroeber, Andreas" <an...@siemens.com>.
Hi samlai,

you should be able to bind an EventListener to the ServerRegion-Field (onChange or onSubmit should be your choice). This Listener can trigger an AJAX-Request and so you should be able to update the Automcomplete-Model. (Don't know the exact syntax, but some JavaAnnotation should handle this.) 

I suppose you then need the AutocompleteModel to be server-based instead of client-based as I suspect a changed AutocompleteModel will not be automatically shipped to the client.

Grz
andi



-----Ursprüngliche Nachricht-----
Von: samlai [mailto:syclai@gmail.com] 
Gesendet: Dienstag, 4. März 2008 08:15
An: users@tapestry.apache.org
Betreff: Autocomplete Using Selection as Criteria


I have an autocomplete textfield.  I'd like the retrieved autocomplete list to be based from a selection field in addition to the autocomplete textfield.  I'm not sure how I can feed the current server region selection to onProvideCompletionsFromServerNameField, serverRegionField is null before submit.  Thanks.

NewUser.java
==========
public class NewUser {
...
	private String serverRegionField;
	private String serverNameField;

	@Component(id = "serverNameField")
	@Mixins("Autocomplete")
	private TextField serverNameText;

	String[] onProvideCompletionsFromServerNameField(String input) {
		Dao dao = Dao.getRequestInstance(requestGlobals);
		Query query = dao.createNamedQuery("findServerNameLikeForRegion");
		query.setParameter("name", input + "%");
		query.setParameter("region", serverRegionField);

		List<String> serverNameList = (List<String>) query.getResultList();
		return serverNameList.toArray(new String[serverNameList.size()]);
	}
...
}


NewUser.tml
=========

<div id="newUserView" class="mainpost">
		<t:form t:id="newUserForm">
			<t:errors />
			
			<div class="t-beaneditor">
				<div class="t-beaneditor">
					<div class="t-beaneditor-row">
						<t:label for="emailField" />
						<t:textfield t:id="emailField" t:validate="required,regexp" size="30"
/>
					</div>
					<div class="t-beaneditor-row">
						<t:label for="serverRegionField" />
						<t:select t:id="serverRegionField" t:model="literal:US,EU"
t:validate="required"/>
					</div>
					<div class="t-beaneditor-row">
						<t:label for="serverNameField" />
						<t:textfield t:id="serverNameField" t:validate="required" size="30"/>
					</div>
					<div class="t-beaneditor-row">
				    	<t:submit t:id="registerButton" value="Register"/>
					</div>
			    </div>
		    </div>
	    </t:form>
    </div>
--
View this message in context: http://www.nabble.com/Autocomplete-Using-Selection-as-Criteria-tp15821577p15821577.html
Sent from the Tapestry - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org