创建我自己的ViewHandler会返回404错误以进一步请求

时间:2012-12-20 14:28:38

标签: jsf-1.2

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

我不希望最终用户知道我的WAR文件名,也不想知道Servlet Receiver名称。所以,我想我会将这个网址个性化为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

2 个答案:

答案 0 :(得分:1)

用于显示不同的网址而不是原始网址。

方法1:

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

使用此文件,您可以显示除真实补丁之外的其他网址。

示例:

        

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

您可以找到信息here http://ocpsoft.org/prettyfaces/

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

PrettyFaces仅适用于JSF。您需要Rewrite(仍然是测试版;这些日期Tuckey's URLRewriteFilter是最佳可用的)

答案 1 :(得分:0)

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

选项2: -

正如jubinPatel所说,UrlRewriteFilter是更改网址格式的最佳选择。

http://tuckey.org/urlrewrite/