2014-01-24 6 views
0

Я использую h:link с includeViewParams=true, чтобы перемещаться между моим списком и просматривать страницы и сделать URL страницы просмотра закладок, но он не работает. Ниже соответствующая часть моего кода:f: параметр не проходит параметр или параметр не устанавливается

в layout.xhtml (мой шаблон):

<f:view locale="#{localeBean.lang}"> 
    <ui:insert name="metadata"/> 

в Articles.xhtml (мой список страниц):

<h:form> 
    <p:datagrid var="item" value="articleController.items"> 
     <p:column> 
      <h:link outcome="View_Articles?faces-redirect=true&amp;includeViewParams=true" styleClass="view-details"> 
       <h:outputText value="#{item.title}"/>  
       <f:param name="id" value="#{item.articleId}"/> 
      </h:link> 
     </p:column> 
    </p:datagrid> 
</h:form> 

в View_Article.xhtml (моя страница подробнее):

<ui:composition template="./WEB-INF/templates/layout.xhtml"> 
    <ui:define name="metadata"> 
     <f:metadata> 
      <f:viewParam name="id" value="#{articleController.id}" /> 
      <f:viewParam name="id" value="#{articleLclController.id}"/> 
     </f:metadata> 
</ui:define> 

Дополнительная информация: Я использую JSF 2.2, фильтр ocpsoft rewrite, библиотеку стилей и ArticleController.java - это сеанс.

Я попытался следующие:

1- я h:commandLink; с этим, навигация работала, но URL не включают в себя представление-Params

Articles.xhtml:

<h:commandLink id="viewArticleDetails" action="#{articleController.viewArticleByID()}" styleClass="view-details"> 
    <h:outputText value="View Details"/> 
    <f:setPropertyActionListener target="#{articleController.id}" value="#{item.articleId}"/> 
    <f:setPropertyActionListener target="#{articleLclController.id}" value="#{item.articleId}"/> 
</h:commandLink> 

ArticleController.java: ...

private Long id; 

public Long getId() { 
    return id; 
} 

public void setId(Long id) { 
    this.id = id; 
    current = ejbFacade.find(id); 
} 

public String viewArticleByID(){      
    return "View_Article?faces-redirect=true&amp;includeViewParams=true"; 
} 

... 

Я ожидал, что URL будет http://localhost:8080/testApp/en/View_Article?id=1, но это было как `http://localhost:8080/testApp/en/View_Article

2- Я вставил http://localhost:8080/testApp/en/View_Article?id=1, и он работал в обоих случаях.

ответ

1

Параметр includeViewParams работает только для параметров просмотра, которые уже в данной точке зрения (в вашем случае, Articles.xhtml, , где нет ни одного из них). Просто передайте их как f:param. Как вы хотите, чтобы выполнить запрос на простой GET, лучше пойти с h:link:

<h:link outcome="View_Articles" styleClass="view-details"> 
    <h:outputText value="#{item.title}"/>  
    <f:param name="id" value="#{item.id}" /> 
</h:link> 

Таким образом, вы будете получать идентификатор элемента на странице назначения, но не достаточно, чтобы URL-адрес изменился в адрес бар. Чтобы достичь этого, добавьте ?faces-redirect=true к вашему результату, чтобы принудительно перенаправить.

Смотрите также:

+0

Я изменил код в Articles.xhtml в '<ч: ссылка результат =" View_Article лица переадресацией = истина & includeViewParams = true "styleClass =" view-details "> ' но он все еще не работает. Btw мой bean - это сеанс. – user2911374

+0

Этот способ предназначен для работы с областью видимости. Почему вы используете область сеанса для работы со спецификой просмотра? –

+0

Я изменил свою фасоль, чтобы посмотреть в нее в скором времени и через google, но это все еще не работает. Проблема, я думаю, в том, что 'f: param' не устанавливает' item.articleId' в 'id' и, следовательно, возвращает null. Или это может быть 'f: viewParam', который не устанавливает' id', потому что я заметил, что 'setId' никогда не вызывается. – user2911374

Смежные вопросы