2013-07-01 21 views
8

Yürütme uygulamasında farklı sayfalardan tetiklenebilecek çeşitli eylemler (ör. "Bir öğeyi sil") var. Eylem tetiklendikten sonra, eylemi gerçekleştirmeden önce kullanıcıyı tekrar yönlendirdikleri sayfaya yönlendirmek istiyorum. Bu oyunda kullanmak için iyi bir desen var mı?Bir eylemden sonra önceki sayfaya yönlendirmek için desen

+0

refer.getHeader aracılığıyla referer'ı almaktan ve flaş veya oturumda saklamaktan daha iyi bir şey mi arıyorsunuz? Daha iyi yollardan da haberdar olmak isterdim. Güncelleme: Sadece scala hakkında sorduğunuzu anladı. –

+0

@alihaider Aşağıda kullandığım çözümü yapıştırdım, ancak yönlendireni kullanmak daha iyi olabilirdi? –

+0

Ayrıca bkz. Http://stackoverflow.com/questions/14891988/redirect-to-referer-after-a-post-request –

cevap

2

Özellikle zarif olmadığına göre, sonunda ortaya çıkmış olduğum şey budur ve bunu yapmanın daha iyi yollarıyla ilgilenirim. benim denetleyicisi Sonra

@(implicit request: RequestHeader) 

... 

<form action="@routes.Controller.doStuff()" method="post"> 
    <input type="hidden" name="previousURL" value="@request.uri"/> 
    ... 
</form> 

: Ben geçerli sayfa URL ile benim forma gizli girdi eklendi

def doStuff() = Action { implicit request => 
    val previousURLOpt: Option[String] = 
    for { 
     requestMap <- request.body.asFormUrlEncoded 
     values <- requestMap.get("previousURL") 
     previousURL <- values.headOption 
    } yield previousURL 
    previousURLOpt match { 
    case Some(previousURL) => 
     Redirect(new Call("GET", previousURL)) 
    case None => 
     Redirect(routes.Controller.somewhereElse) 
    } 
} 
4

Eğer bir iptal düğmesi varsa kolayca örneğin, şablonları içinde @request.getHeader("referer") kullanabilirsiniz önceki sayfaya yönlendirebilir gerektiğini, bunu kullanın:

<a href="@request.getHeader("referer")">Cancel</a> 

bu yolla, şablonlarınızdan için herhangi bir ekstra bilgi aktarmak gerekmez. (Oynatma 2.3.4 ile test)

1

Bunu yapmak için bulduğum en kolay şekilde, kontrolör yöntemi içinde olduğunu, bunu kullanın:

:

String refererUrl = request().getHeader("referer"); 

Yani, böyle bir şey yapmak istiyorum

public static Result query(String queryStr, int page, int offset) { 
    String refererUrl = request().getHeader("referer"); 
    Logger.info("refererUrl: " + refererUrl); 
    if(queryStr.length() < 3) { 
     flash(Application.FLASH_ERROR_KEY, "type a longer search than '" + queryStr.trim() + "'"); 
     return redirect(refererUrl); 
    } 
    return ok(listings.render(searchService.searchListings(queryStr))); 
} 

Bir flash ileti ile bir yönlendirme() ve bir render() yapmamanız gerektiğini unutmayın.

İlgili konular