2012-03-30 69 views
3

在我的JSF Web应用程序中,我想为用户创建一个URL以供书签或复制。那部分是很容易的,这样的:创建不带windowid参数的JSF URL

<h:link value="Permanent Link" 
     outcome="/showStuff"> 
    <f:param name="recID" value="#{bean.recordID}" /> 
</h:link> 

虽然该链路具有所需的参数(recID)在它,它也有由JSF的Servlet产生的WINDOWID参数。没有任何方便的方法来生成URL,而不需要windowid参数?或者这有什么区别?

(这是钻嘴鱼科)

+0

JSF/Mojarra不这样做。难道你不会和CDI或任何CDI扩展混淆吗?例如。 '@ WindowScoped'什么的? – BalusC 2012-03-30 04:47:36

+0

@BalusC以及我正在使用Apache MyFaces CODI来实现ViewAccessScoped。那是对我的做法吗? – AlanObject 2012-03-30 14:40:58

+0

最有可能。标准CDI'@ ConversationScoped'也可以通过添加'cid'请求参数来实现。如何能够在单个对话中跟踪多个视图?我认为您需要在CODI文档中查找如何关闭在“”中添加窗口ID。如果徒劳无益,我认为你最好的选择是用简单的''代替。 – BalusC 2012-03-30 14:43:44

回答

5

您可以使用URLRewriteFilter框架如OCPsoft Rewrite URLRewriteFilter

做一些去除WINDOWID这应该使用单一配置规则是相当简单的。如果这个规则过于严格或过于笼统,你显然可能会弄乱。

.defineRule() 
.when(Direction.isOutbound().and(
     URL.matches("{prefix}{windowId}{suffix}") 
     .where("windowId").matches("windowId=[^&]+"))) 
.perform(Substitute.with("{prefix}{suffix}")) 

检查出改写网站。这很容易设置。 http://ocpsoft.org/rewrite/

+1

无法拒绝评论,这个答案的作者也是有问题的框架的作者 - 我可以肯定地推荐:-) – 2012-03-30 19:01:37

+0

哦,是的,PS 。我写了这个框架:)谢谢Jan! – Lincoln 2012-03-30 19:02:40

+1

heh。仅仅因为你写了一个框架并没有任何理由阻止你!这看起来很有趣,但对我的需求有点矫枉过正。我可以在我的bean中写一个方法来根据从FacesContext中提取的部分,一些常量和一个变量生成URL。即使如此,我也会使用重写方法,因为它看起来对于稍后更复杂的情况很有用。 – AlanObject 2012-03-30 19:17:34