4

我有一个URL这样的 http:/myDomain/ myWAR/myServletReceiver

我不希望最终用户知道我的 WAR 文件名或 Servlet 接收器名称。所以,我想我会将这个 URL 个性化为 http:/myDomain/ MyAccount 之类的东西。

我在下面添加了一段代码来实现这一点。

创建了我自己的包。代码如下。

package myOwnPackage
import javax.el.ExpressionFactory;
import javax.el.ValueExpression;
import javax.faces.application.ViewHandler;
import javax.faces.context.FacesContext;
import com.sun.facelets.FaceletViewHandler;


public class DynamicViewHandler extends FaceletViewHandler{

    public DynamicViewHandler(ViewHandler parent) {

        super(parent);
        System.out.println("Entered into DynamicViewHandler");
    }

    public String getActionURL(FacesContext context, String viewId) {
        System.out.println("Inside getActionURL");

        ExpressionFactory expressionFactory = context.getApplication().getExpressionFactory();
        ValueExpression valueExpression = expressionFactory.createValueExpression(context.getELContext(), viewId, String.class);
        String result = (String) valueExpression.getValue(context.getELContext());

        System.out.println("Value of Result is:" +result);

            //I am in the beginning steps and just want to print the value of "result" for each response
        return result;
    }

}

我注册了这个faces-config.xml

<application>
<view-handler>myOwnPackage.FaceletViewHandler</view-handler>
<state-manager>org.jboss.portletbridge.application.PortletStateManager</state-manager>
</application>

当我点击我的应用程序时,我的 Servlet 重定向到的欢迎页面是/jsp/html/index.xhtml.

因此,在日志中,我得到了低于打印的值。

Entered into DynamicViewHandler

Value of Result is:/jsp/html/index.xhtml

页面中还有其他链接index.jsf。当我单击其他链接时,我在浏览器上收到以下错误消息(而不是转到/jsp/html/secondPage.jsf

http:/myDomain/jsp/html/index.html not found (404) error.

我肯定错过了我的东西DynamicViewHandlerfaces-config.xml而且可能更多。

我在这里还缺少什么?

另外,我想映射jsp/html/secondPage.jsf/MyAccount

4

2 回答 2

1

用于显示不同的 URL 而不是您的原始 URL。

方法一:

你有一个文件名 pretty-config.xml。

使用此文件,您可以显示除真实补丁之外的不同 url。

例子:

通过这两行简单的配置,用户在浏览器 URL 和输出 HTML 中看到:pattern="/mySite/",但服务器实际上正在渲染资源:/faces/sites/mySite.jsf 的实际位置服务器上的页面。

你可以在这里找到信息 http://ocpsoft.org/prettyfaces/

方法2:作为BalusC关于SO的建议

PrettyFaces 仅适用于 JSF。您需要Rewrite(仍处于测试阶段;如今Tuckey 的 URLRewriteFilter是最好的)

于 2012-12-28T05:00:42.370 回答
0

选项 1:- 如果您使用 httd 服务,您可以使用 mod_rewrite 选项更改 url 模式 http://httpd.apache.org/docs/current/mod/mod_rewrite.html

选项2:-

正如 jubinPatel 所说, UrlRewriteFilter 是更改 url 模式的最佳选择。

http://tukey.org/urlrewrite/

于 2012-12-30T14:27:55.867 回答