我一直使用漂亮的面孔的url没有问题,直到我开始使用映射的url功能(第3.6节)。http://ocpsoft.org/docs/prettyfaces/3.3.3/en-US/html/Configuration.html config.actions
我得到的输出和我想要发生的动作工作良好。问题是,我不能得到任何我的资产下的资产文件夹。我得到一个404。奇怪的是,其他的配置都没有问题。我把它们放在一起就没问题了。该应用程序使用模板,所以链接到css, js等。是完全一样的。当我去到一个普通的旧的(例如/home)映射,他们工作得很好,去到另一个页面的行动,他们不工作。但是模板渲染可以。事实上,参数注入和动作同样有效。
PRETTY CONFIG:
<url-mapping id="home"> <!-- assets work -->
<pattern value="/home" />
<view-id value="/home.jsf" />
</url-mapping>
<url-mapping id="validate-token"> <!-- assets don't work -->
<pattern value="/validate-token/type/#{id:validateByTokenController.tokenType}/token/#{validateByTokenController.token}" />
<view-id value="/validate-token.jsf" />
<action>#{validateByTokenController.init}</action>
</url-mapping>
豆:
@RequestScoped
@Named
public class ValidateByTokenController {
private String tokenType;
private String token;
public void init() {
token = "J" + token;
tokenType = "J" + tokenType;
}
XHTML示例CSS链接:(与"home"配置相同,但与"validate-token"不同)
<link rel="stylesheet"
href="assets/plugins/bootstrap/css/bootstrap.min.css" />
<link rel="stylesheet" href="assets/css/style.css" />
问题是你的CSS文件使用的是相对url。
对于像/validate-token/type/foo/token/bar
这样的URL,浏览器认为/validate-token/type/foo/token/
是当前目录。所以他尝试从/validate-token/type/foo/token/assets/css/style.css
加载CSS文件。
尝试使用绝对url代替你的CSS:
<link rel="stylesheet" href="#{request.contextPath}/assets/css/style.css" />