So some background, I am working in GWT, using MVP and activities and places. So I have all my stuff working with hyperlinks, and places are changing. I am also using a PlaceController.gotTo(Place).
Now what I want to do is be able to send the person to another place but programatically. Right now with the setup GWT manages the converting of the url into a place, and then fires the activities from that, but what I would like, is to either convert a url to a place, using the same way gwt does it or change the url, and fire a history changed type of effect onto the site.
What I don't need is an anchor to reload my whole site, I just want to feed a string into something and get the whole place change situation moving.
I want the effect of a hyperlink.
I'm not sure I understand exactly what you're trying to do, but PlaceHistoryMapper is the only tool that GWT uses: feed a String to getPlace and it gives your the corresponding place. Alternately, you could use History.newItem (note that contrary to PlaceController#goTo, if the user cancels the PlaceChangeRequestEvent, the URL would have already changed).
Related
I want to build a website, maybe similar to a movie database, where every page has, say, actors, director, year (it seems that Lektor can deal very well with such structured metadata), and I am thinking about how to realize internal links between pages on that site.
Say I have a text such as
just like in [his previous movie](link), he shows again ...
then I guess I could use the absolute path of the linked page as link target, but that makes me very inflexible with respect to changing URL structure. Can I somehow just use the ID of the target content?
Or, better yet, can I somehow automatically obtain the title of the linked page?
just like in his previous movie <<link:title>>, he shows again ...
Can I use the standard Markdown blocks for that or would I have to add some handcrafted database lookup logic?
if some contents will be changed in future. I think you can use the databag feature to implement it. you just modify the databg in case changed is need.
I am creating an application and trying to figure out best way to deal with navigation in it. User can choose different view settings (which content to show and options to filter it). Part of settings is stored in backend in user preferences model. Another part is stored in url and managed by router. But there is more settings I want to keep. The reason: I want to be able to refresh content therefore I need to keep settings somewhere, not update content on user actions and forget how I came to this state. My question is: what is the best place for such settings? Collection object? View object? My own controller?
P.S. to make it more clear, I'm working on rss reader application. And I want, for example, to show last week posts from certain feeds which are starred etc.
Save it in the URL. Thats the only place you can really rely on. If you need more then routes use query parameter like in a classic web application and use them in the view.
I have this gwt app which say, runs on http://mygwtapp.com/ (which is actually: http://mygwtapp.com/index.html)
The app host a database of users, queried by searching usernames using the search view and results are shown in the user results view. Pretty useful enough. However I need to bb add a way that user view can be viewed by just typing http://myapp.com/user123
I am thinking that the question I have here, the answer is a server side solution. However if there's a client side solution, please let me know.
One fellow here in StackOVerflow suggested that the format would be like this:
mygwtapp.com/index.html#user123
However the format is important to be like: http://myapp.com/user123
The 'something' in 'http://host/path#something' is a Fragment identifier. FIs have a specific feature: the page isn't reloaded if only FI part in URL changes, but they still take part in browser history.
FI's are a browser mechanism that GWT uses to create "pages", i.e. parts of GWT application that are bookmarkable and have history support.
You can try to use an URL without # (the FI separator), but then you will have a normal URL, that reloads the page with every change and it could not be (easily) a part of a normal GWT app.
mygwtapp.com/index.html#user123
That would be using the History mechanism (http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsHistory.html) which I would add is the recommended way of doing it.
However, if you insist on using something like http://myapp.com/user123, one of the possible ways is to have a servlet which accepts this request (you might have to switch to something like http://myapp.com/details?id=user123). The servlet will look up the DB and return your host html back. Before returning it will inject the required details as a Dictionary entry in the page (http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/i18n/client/Dictionary.html) On the client you can read this data and display on the UI
Twitter has an awesome new way to enter "#" and "#" in the latest iPhone app.
http://blog.twitter.com/2011/03/twitter-for-iphone-ipad-even-better.html
When you type "#" or "#" and then type characters it instantly starts to autocomplete in a table below. How are they doing this? It feels native, but is it?
If it's native, how did they do it? UITextView with an active UITableView? It's really fast and smooth, so I'm guessing they load the phone with trending #'s and your #'s and it's fast because the data is local (it goes to just typing if it's not there).
But I'm wondering if there was a way to achieve this affect with data that is remote on a webserver using async calls.
Any thoughts on how to do this / get started?
If by 'native' you mean, build into the SDK, then I have to disappoint you, this is not a build-in SDK feature (there is something similar with the UISearchController/UISearchBar classes, but that's not what Twitter is leveraging).
This however, does not mean that you cannot build it yourself. I believe it would be quite simple. All you would have to do is monitor every time the user inputs text into the UITextView (this can easily be done using the UITextView delegate methods). You do a check on all the text, and if the user enters an '#' or a '#', or any other symbol you want to watch for, you create/show a UITableView beneath the text view (or wherever you want it).
As for the table view's datasource, it would have to be based on information you gather through search. When Twitter shows you a list of trending tags, etc. I would think it is something they have pulled down when you synced your feed, and then cached somewhere. If you were using a web server, you could do the same. When the user starts entering specific text, you could do a search on the server. If you do the network requests asynchronously, you can display a UIActivityIndicator in the table view, until you've gotten a response from the server. If the user enters more text before the server has 'replied' to you, simply cancel the old server request, and start a new one.
I haven't implemented something like this myself, and I have no knowledge of how it would perform in real-life, but if I was to implement something similar off the top of my head, this would be the aproach I would pursue. It might not suit your case perfectly, but hopefully, it will have given you some inspiration :)
In GWT, I would like to do something like a form submission that takes me to a new page, with new style sheet and new static elements, and when I get there, be able to extract the values of GWT variables still in GWT. In other words, I want to do most of the form processing on the client side instead of sending it to a servlet to be processed and sent back. Is that possible? Would FormPanel allow me to do that? How do I access the contents of the form fields in GWT on the new page?
I'm not sure I'm getting the right picture here, but I see several possibilities:
Pass the variables in the url like example.com/myform#create/param1/param2 or any other format you want, then read it using the History class
Use something like this - create an iframe from GWT (maybe put it in Lightbox or something similar), populate it the way you want using the current state of the app, and when the user is finished, he'll just close the (Lightbox) frame and get back to the main application
You could also pass around data in a "hidden" way (no visible data in the url or even through POST) using the window.name hack - there's even a sample implementation for GWT to get you started
ATM, I prefer the second option, since it goes best with the whole no refresh, same page, one app, GWT thing :) That is, unless I'm getting the wrong picture and you want to do something else.
GWT is really meant to be used for the whole application, where "pages" are replaced by application state and URL fragments, and "form submission" is replaced by AJAX calls.
If you want to validate form fields, this can easily be done with regular JS or a library like jQuery.
I'm not sure it I get you right either, but for what I'm receiving, having a new page to process the form is not the optimal design. The reason been that you might have to write different GWT app for that which mean overheads, and creating new window (or tab) will move the user's attention away from where they are. Why not using another page WITHIN gwt to process the form with tab panel or hidden panel?