【发布时间】: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.
我的DynamicViewHandler、faces-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 上显示友好的URLMyAccounts? -
@Vikas 你需要改变你的 URL,显示一些不同的 URL,隐藏原始文件路径?
-
雅菊斌。我需要更改 URL,显示其他一些(我自己的友好 URL)并隐藏原始文件路径
标签: jsf-1.2