【发布时间】:2013-08-14 03:28:57
【问题描述】:
我正在使用 Primefaces 和 Spring 在 JSF 2 中构建一个在线应用程序。 我想使用 Pretty Faces 使我们的搜索网址可收藏。
这是我的 pretty-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<pretty-config xmlns="http://ocpsoft.org/prettyfaces/3.3.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ocpsoft.org/xml/ns/prettyfaces/ocpsoft-pretty-faces-3.3.3.xsd">
<url-mapping id="index">
<pattern value="/" />
<view-id value="/sites/public/template/index.xhtml" />
</url-mapping>
<url-mapping id="searchWithParams">
<pattern value="/search/#{searchView.searchQuery}/#{searchView.searchTags}/#{searchView.searchOrder}" />
<view-id value="/sites/public/product/productSearch.xhtml" />
</url-mapping>
<url-mapping id="searchWithoutParams">
<pattern value="/search" />
<view-id value="/sites/public/product/productSearch.xhtml" />
</url-mapping>
</pretty-config>
这是我要注入的 Bean:
@Component
@Scope("request")
public class SearchView {
private String searchQuery = "";
private String searchTags = "";
private String searchOrder = "";
public SearchView() {
// void
}
public void navigate() {
String url = "";
try {
url = "/search" +
"/" + URLEncoder.encode(searchQuery, "UTF-8") +
"/" + URLEncoder.encode(searchTags, "UTF-8") +
"/" + URLEncoder.encode(searchOrder, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
url = "/search";
}
try {
FacesContext.getCurrentInstance().getExternalContext().redirect(url);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// Getters and Setters ...
}
只有“/search”可以正常工作。我还尝试更改 pretty-config.xml 中的映射顺序,并对其他两个参数使用虚拟值,并且只使用一个参数。我尝试的另一件事是将表达式“#{bean.param}”更改为“#{getParam : bean.param}”。更改我的 bean 的范围也无济于事。
在网页上,我使用 primefaces 命令链接,其中包含“searchView.navigate”作为操作参数。
我总是收到以下错误消息:
HTTP 状态 404 - /search/a/b/c
输入状态报告
消息/搜索/a/b/c
说明请求的资源 (/search/a/b/c) 不可用。
【问题讨论】:
-
我想我现在知道出了什么问题:在链接中我忘记了开头的“/sitename”
-
那么你解决了这个问题吗?是因为缺少上下文路径造成的吗?
标签: jsf primefaces el friendly-url prettyfaces