我使用的是选择一个菜单做导航到我的网站的不同部分:
<p:selectOneMenu value="#{navigator.outcome}">
<f:selectItem itemLabel="Select page..." />
<f:selectItem itemValue="page1" itemLabel="Page 1" />
<f:selectItem itemValue="page2" itemLabel="Page 2" />
<f:selectItem itemValue="page3" itemLabel="Page 3" />
<p:ajax event="change" listener="#{navigator.navigate}" />
</p:selectOneMenu>
是否有这样做的更SEO友好的方式? 我担心的是,JavaScript的链接将不会得到遵守。
使用具有自定义内容<p:column>
其中具有<h:link>
。
豆:
private List<Page> pages;
@PostConstruct
public void init() {
pages = new ArrayList<Page>();
pages.add(new Page("Page 1", "/page1.xhtml"));
pages.add(new Page("Page 2", "/page2.xhtml"));
pages.add(new Page("Page 3", "/page3.xhtml"));
}
视图:
<p:selectOneMenu var="page">
<f:selectItems value="#{bean.pages}" var="page" itemLabel="#{page.title}" />
<p:column>
<h:link value="#{page.title}" outcome="#{page.viewId}" />
</p:column>
</p:selectOneMenu>
请注意,这不符合工作List<SelectItem>
也不是个别<f:selectItem>
条目。 你真的需要提供一个List<Entity>
(式中, Entity
是Page
在上面的例子)。
这产生了<table>
与fullworthy和检索(和可点击!) <a>
元件。
也可以看看:
- 是什么重定向和导航/前进,什么时候使用什么区别?
- 如何在JSF导航? 如何使URL反映当前页面(而不是以前的一个)
只是创建导航功能为:
<p:selectOneMenu value="#{navigator.outcome}">
<f:selectItem itemLabel="Select page..." />
<f:selectItem itemValue="page1" itemLabel="Page 1" />
<f:selectItem itemValue="page2" itemLabel="Page 2" />
<f:selectItem itemValue="page3" itemLabel="Page 3" />
<p:ajax event="change" listener="#{navigator.navigate}" />
</p:selectOneMenu>
public void navigate() {
FacesContext context = FacesContext.getCurrentInstance();
NavigationHandler navigationHandler = context.getApplication()
.getNavigationHandler();
navigationHandler.handleNavigation(context, null, outcome
+ "?faces-redirect=true");
}
有很多方法可以ahieve你想要什么。 首先,我将描述替代你的方法,然后将张贴在SEO的一些言论。
使用普通的表格上更改事件提交
首先,你可以通过正常的表单处理您提交的导航,当用户提交隐含在变化事件的一种形式:
<h:form>
<h:selectOneMenu value="#{bean.currentPage}" converter="pageConverter" onchange="submit()">
<f:selectItems value="#{bean.pages}" var="page" itemLabel="#{page.name}" />
</h:selectOneMenu>
<h:commandButton value="submit" action="#{bean.handleNavigation}" style="display:none"/>
</h:form>
同
@FacesConverter("pageConverter")
和托管Bean( @ManagedBean Bean
)与
private List<Page> pages;
private Page selectedPage;
public String handleNavigation(){
//do some job before navigation
return (selectedPage == null) ? null : selectedPage.getUrl();
}
和模型类
class Page {
private String name;//title in links
private String url;//JSF view-id
}
导航上一个有意义的客户端点击按钮
您可以使用您的Dropbox让用户选择的选择范围,有一个按钮来进行导航:
<h:form>
<h:selectOneMenu value="#{bean.currentPage}" converter="pageConverter">
<f:selectItems value="#{bean.pages}" var="page" itemLabel="#{page.name}" />
</h:selectOneMenu>
<h:commandButton value="Navigate" action="#{bean.performNavigation}"}/>
</h:form>
用与上述相同的模型。
基于导航<h:link>
小号
你导航的工作与简单<h:link>
S:
<ul>
<ui:repeat var="page" value="#{bean.pages}>
<li>
<h:link value="#{page.name}" outcome="#{page.url}" />
</li>
</ui:repeat>
</ul>
和风格这个菜单中相应。
SEO评论
SEO是越来越重要的今天,所以下面的规则是必不可少的。 使用另外一个URL重写解决方案来命名对网页链接用(基本)是很重要的Page
如上类,让用户看到www.site.com/contact-us
在他的浏览器,而不是www.site.com/contact.xhtml
。
恕我直言,以遵循最简单的方法是使用Prettyfaces ,这是一个很好的解决方案,我的口味。 它可以让你设置你的URL重写很容易(和重写JSF组件的所有内部URL)。
为了提高您的网站搜索引擎优化组件,你可以引入现场seoUrl
在Page
模型类,然后有一个Prettyfaces映射,它会显示搜索引擎友好的URL(即www.site.com/contact-us
),而不是JSF视图ID(即www.site.com/contact.xhtml
)在Web浏览器的地址栏中。
编辑 -在需要的URL重写争议
的搜索引擎友好的规则有些背景,提出了由谷歌,其中有参考网址结构如下:
- 改善网址结构-这也可能导致搜索引擎文档(更好的抓取谷歌搜索引擎优化指南 );
- 花时间做你的URL尽可能简单为用户和搜索引擎。 有些网站管理员试图通过重写他们的动态URL为静态的 (实现这一相同的参考 ,我加的);
- 用文字的网址(未来的所有引用来自谷歌引导为好);
- 创建一个简单的目录结构;
- 允许URL的一部分的可能性被删除。
而现在一些从SEO专家的一般准则:
- 创建优化的网址( 了解SEO友好的URL语法规范 );
- 静态就是道路&的光( 针对URL 11和最佳实践 );
- 选择描述性网址尽可能( URL有章可循创建搜索引擎和用户友好的URL ),等等。
我的问题的检查:
- 如果您使用的是静态类型的网页,其URL可以是
www.site.com/contact-us.xhtml
,但为什么会有6级过度人物- www.site.com/contact-us
会更好; - 你的facelet页面可以位于一个深嵌套的内部结构,如
/pages/articles/general/how-to-do-jsf.xhtml
,但它会更好,有和URL一样www.site.com/articles/how-to-do-jsf
与路径体现在页面上,如果必要的; - 有些developpers倾向于使用Facelets的短文件名(
jsf-bp.xhtml
),或unmeaningful者( article23.xhtml
),但它会更好地展示的网址www.site.com/article/jsf-best-practices-for-beginners
; - 扩展的使用,无论是
.xhtml
, .jsf
等可能导致用户(也许搜索引擎),以为内容是动态的 (意思是内容从一个模板渲染),就像在www.site.com/product.xhtml?id=12345
,但静态内容应该是首选,因为用户(也可能搜索引擎)会认为这样的URL描述compeletely无状态的页面,就像在www.site.com/products/jsf-book-for-advanced-users
。 此外,greately提高网站可用性,这是非常重要的也; - 人们倾向于使用查询参数标识(
?id=12345
和路径参数名称() /jsf-book-for-advanced-users
); - URL重写提供了一个清晰的方式来浏览您的网站。 想象一下,一个路径
www.site.com/products/jsf-book-for-advanced-users
:这种类型的URL结构将呈现一个独特的产品页面,清除/jsf-book-for-advanced-users
可能使一个完整的目录。 但如果你有要发生什么www.site.com/product.xhtml?name=jsf-book-for-advanced-users
产品和www.site.com/catalogue.xhtml
的目录? 其中的逻辑是不明确的用户,重写使您的URL结构; - 最后,大多数与SEO处理不要使用文件扩展名(且很少利用查询参数)的网站,以及网站,我们都在,stackoverflow.com的。
我并不认为源提到了我是不争的,或者是非常权威的,或者它们的输入需要被应用到每个Web应用程序等,但我相信,存在很长时间,结构合理,界面友好的网站时间在生产中往往遵循这些规则。