I'm using a select one menu to do navigation to different parts of my site:
<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>
Is there a more SEO friendly way of doing this? I'm worried that the JavaScript links won't get followed.
Use custom content with <p:column>
with therein a <h:link>
.
Bean:
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"));
}
View:
<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>
Note that this doesn't work with List<SelectItem>
nor individual <f:selectItem>
entries. You really need to provide a List<Entity>
(wherein Entity
is Page
in the above example).
This generates a <table>
with fullworthy and crawlable (and clickable!) <a>
elements.
just create function navigate as :
<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");
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With