J'ai un champ de recherche qui envoie une requête ajax à un extrait. Lorsque la fonction snipped est appelée, je voudrais que la requête de recherche soit ajoutée à l'URL via un hash d'ancrage (ala: http://localhost/search#param) afin que je puisse recréer la requête de recherche si l'utilisateur copie l'URL et revient plus tard. Évidemment, l'autre côté est de tirer le champ d'ancrage dans l'extrait de sorte que la recherche peut être recréée si nécessaire. Je suis un peu perdu quant à la façon de le faire .. même pas sûr où un bon point de départ est. Tous les conseils ou astuces sur la façon de le faire dans Lift seraient les bienvenus.Redirection vers les paramètres de recherche dans l'ascenseur
2
A
Répondre
2
Je viens de recevoir ce travail .. voici mon modèle:
<lift:surround with="default" at="content">
<lift:searchSnippet.search>
<s:query/>
<s:submit/>
</lift:searchSnippet.search>
</lift:surround>
Et mon extrait:
class SearchSnippet extends Logger {
val ns = "s"
def search(in: NodeSeq) : NodeSeq = {
// save the url of the original page request
val url = S.uriAndQueryString.openOr("")
var query = ""
def submit : JsCmd = {
JsRaw("window.location.href = '" + url + "#" + query + "'")
}
SHtml.ajaxForm({
bind(ns, in,
"query" -> SHtml.text(query, { q =>
query = q
}),
"submit" -> (SHtml.submit("Search",() => {}) ++ SHtml.hidden(submit _)))
})
}
}
L'astuce est de sauver l'URL lorsque l'extrait rend à l'origine de sorte que vous n » t obtenir l'ajax_request/... uri à partir de laquelle le formulaire ajax soumet.
0
LiftRules.satelessRewrite.append{
case RewriteRequest(ParsePath(List("path","to", myParam), _, _, _(, _, _) => RewriteResponse("path" :: "to" :: Nil, Map("myParam" -> myParam))
}
Notez que j'ai copié cela, et ne pas coller. donc vous devriez probablement regarder dans le livre si cela ne fonctionne pas.
Ne recrée/n'exécute pas les requêtes pour les URL qui contiennent déjà une valeur #. – Allyn
Les balises d'ancrage ne sont pas envoyées au serveur par le navigateur. Vous, cependant, pouvez saisir cette balise d'ancrage en utilisant Javascript (location.hash.substring (1)), puis en faisant un appel au corps # onLoad pour récupérer les résultats de la requête. – Collin