【问题标题】:Creating my own ViewHandler is returning 404 error for further requests创建我自己的 ViewHandler 为进一步请求返回 404 错误
【发布时间】:2012-12-08 02:24:05
【问题描述】:

我有一个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

【问题讨论】:

  • 您的标记令人困惑。您使用的是 JSF 1.2 还是 JSF 2.x?顺便说一句,代码建议使用 JSF 1.2,所以绝对不要添加 jsf-2 标签,而是添加 jsf 标签。
  • 我很抱歉 BalusC。我正在使用 JSF 1.2。我不确定在 JSF2.0 中创建 ViewHandler 认为它在 JSF2.x 中会相同所以,也标记了它。我现在已经编辑了。再次感谢:)
  • 如果我编写自己的ViewHandler 并覆盖getActionURL,我应该返回一个字符串,这是我想要的友好 URL。假设我将 MyAccounts 作为友好 URL 返回,然后它会尝试找到 MyAccounts 的映射(否则会抛出 404 错误)。为此,如果我在web.xml 中输入并编写一个Servlet 映射,那么Servlet 中的代码应该是什么来显示页面的实际内容但仍然在URL 上显示友好的URL MyAccounts
  • @Vikas 你需要改变你的 URL,显示一些不同的 URL,隐藏原始文件路径?
  • 雅菊斌。我需要更改 URL,显示其他一些(我自己的友好 URL)并隐藏原始文件路径

标签: jsf-1.2


【解决方案1】:

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

方法一:

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

使用此文件,您可以显示不同于真实补丁的其他 url。

例子:

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

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

方法2:作为BalusC对SO的建议

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

【讨论】:

    【解决方案2】:

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

    选项2:-

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

    http://tuckey.org/urlrewrite/

    【讨论】:

      猜你喜欢
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 2011-10-24
      • 1970-01-01
      • 2022-11-04
      • 2021-08-13
      • 1970-01-01
      相关资源
      最近更新 更多