gpt4 book ai didi

jsf - 为什么 change destination extension from . html 到 .xhtml?

转载 作者:行者123 更新时间:2023-12-04 15:11:48 25 4
gpt4 key购买 nike

我正在使用 JSF 2.1,但在使用 <h:link> 时遇到了一些问题。标签。我试图将链接的结果点从我的 XHTML 文件转换为纯 HTML 文件。但是,当我运行我的 Web 应用程序时,.html链接生成的 URL 中的扩展名会自动转换为 .xhtml延期。

这是我的 Facelet 文件:

<h:body>
<h:form>
<h:link value="animation" outcome="#{contentForm.ccAnimationLink}"/>
</h:form>
<h:body>

这是我的 contentForm bean:
package my.app.content;

import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

@ManagedBean
@RequestScoped
public class ContentForm implements Serializable {
private static final long serialVersionUID = -8463354828156798513L;
private String ccAnimationLink = "";

@PostConstruct
public void init() {
ccAnimationLink = "/content/cc/CC_animation/story.html";
}

public String getCcAnimationLink() {
return ccAnimationLink;
}

public void setCcAnimationLink(String ccAnimationLink) {
this.ccAnimationLink = ccAnimationLink;
}
}

现在,当我运行此应用程序时,出现以下错误:

Unable to find matching navigation case from view ID '/content/modifiedcc.xhtml' for outcome '/content/cc/CC_animation/story.html'



我确保我的 URL 正确,所以我创建了一个 story.xhtml文件也在该位置。有了那个文件,它就可以正常运行了。

如果我拉取生成页面的源代码,我可以看到 <h:link>已正确更改为“a href”标签,如下所示:
<a href="/MyWebApp/content/cc/CC_animation/story.xhtml">animation</a>

出于某种原因,虽然 URL 从 story.html 改变了,就像我在我的 bean 里一样,到 story.xhtml .

如何确保它保持为 story.html 而不是将其更改为 xhtml?

这是我的 web.xml还有文件:
  <display-name>MyWebApp</display-name>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<welcome-file-list>
<welcome-file>jsf/login/login.xhtml</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
</web-app>

我尝试将以下内容添加到 web.xml ,这没有什么区别:
  <servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>

我确定这有一个非常简单的解决方案,我现在只是缺少它。帮助将不胜感激。我希望这个问题很清楚。

最佳答案

JSF 2.0+ 引入了 <h:link> 在其 outcome 中采用导航案例结果的组件属性并自动生成正确的 URL。这就是为什么您在没有为 faces servlet 添加另一个映射的情况下出现错误的原因:只需重新阅读错误。它对于创建 JSF 应用程序间导航很有用。

或者,一直有一个 <h:outputLink> 在其 value 中采用 URL 的组件属性代替。它对于在 JSF 应用程序外部创建导航很有用。

一定要阅读BalusC关于这个问题的经典:When should I use h:outputLink instead of h:commandLink? .

也就是说,请考虑以下组件:

<h:link outcome="/destination" value="link" />
<h:outputLink value="/destination.html">
outputLink
</h:outputLink>

前一个组件将通过附加一个 faces servlet 映射将其结果转换为实际的 URL,而后一个组件将保留其值原样。

因此,您的问题将通过使用以下组件来解决:
<h:outputLink value="#{contentForm.ccAnimationLink}">
Animation
</h:outputLink>

关于jsf - 为什么 <h :link> change destination extension from . html 到 .xhtml?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20310091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com