2016-11-03 13 views
0

Когда эта страница загружается, она принимает viewparam и использует конвертер для получения объекта.JSF - Передача f: param, когда paginator используется в компоненте ViewScoped

Im получаю следующее сообщение об ошибке, когда Paginator используется, потому что viewParam не передается на преобразователь

в java.lang.Long.parseLong (Unknown Source) в com.civi.HelloWorld.controller. UserConverter.getAsObject (UserConverter.java:36)

Каждый раз, когда страница обновляется, ему необходимо передать парам.

Так при использовании pagintor в DataTable я должен послать п: PARAM заказовМои для viewParam использовать конвертер, чтобы загрузить объект

<f:metadata> 
    <f:viewParam 
     name="idUser" 
     value="#{userBean.tipTourUser}" 
     converter="#{userConverter}" 
     required="true" 
     requiredMessage="Bad request. Please use a link from within the system." /> 
</f:metadata> 


<h:form id="abc" styleClass="simpleformstyle"> 
<p:dataTable id="transactionsTable" 
    var="transaction" 
    resizableColumns="true" 
    value="#{userBean.tipTourUser.tips}" 
    rendered="#{not empty userBean.tipTourUser.tips}" 

    rows="2" 
    paginator="true" 
    paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
    rowsPerPageTemplate="1,2,3" 
    paginatorPosition="bottom" > 

//SOMETHING LIKE THIS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
    <f:param name="idUser" value="#{userBean.tipTourUser.idUser}" />  
//SOMETHING LIKE THIS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

    <p:column> 
     <f:facet name="header"> 
      <h:outputText style="float: left;" value="Date received" />  
     </f:facet> 
     <h:outputText value="#{transaction.received}" > 
      <f:convertDateTime pattern="d-M-yyyy" /> 
     </h:outputText> 
    </p:column> 
</p:dataTable> 
</h:form> 

UserBean

@ViewScoped 
@Named 
public class UserBean implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @EJB 
    private UserService userService; 

    private User tipTourUser; 

    private boolean editmode; 


    //sets the edit mode and stores the original values 
    public void edit() { 
     editmode = true;  
    } 


    //resets the original values and leaves the edit mode 
    public void cancel() { 
     editmode = false; 
    } 


    //saves updated values and leavers the edit mode 
    public void save(User user) {       
     tipTourUser = userService.updateUser(user); 

     editmode = false;  
    } 


    public boolean isEditmode() { 
     return editmode; 
    } 


    public User getTipTourUser() { 
     return tipTourUser; 
    } 


    public void setTipTourUser(User tipTourUser) { 
     this.tipTourUser = tipTourUser; 
    } 

} 

Преобразователь

@Named 
@RequestScoped 
public class UserConverter implements Converter 
{ 
    @EJB 
    private UserService userService; 


    public UserConverter() { 
    } 

    //get User object from idUser, key = idUser 
    @Override 
    public Object getAsObject(FacesContext arg0, UIComponent arg1, String key) throws ConverterException {   
     return userService.getUser(Long.parseLong(key)); 
    } 


    @Override 
    public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) throws ConverterException { 
     return arg2.toString(); 
    } 
} 
+0

Когда вы перезагружаете страницу? Это вообще необходимо или вы не можете использовать ajax? – djmj

+0

, когда я использую разбиение на страницы в datatable (смена страниц или использование RowsPerPageDropdown), страница затем перезагружается и пытается получить viewParam, но f: param не передает ничего в настоящее время как есть – blitzeus

+0

У вас есть 'h: form' вокруг данных? Функция PrimeFaces Datatable pagination не обновляет страницу по умолчанию. Это компонент AJAX. – djmj

ответ

1

Вам нужен h:form вокруг вашего данных, тогда это компонент AJAX и не перезагружать страницу в разбивке на страницы.

Для базовой ссылки GET linkgs вы должны передать параметр вида для каждого перенаправления. Иначе это потеряно. Что-то вроде этого:

<h:link> 
    <o:param name="idUser" value="#{userBean.tipTourUser}" converter="#{userConverter}" /> 
    <f:param name="page" value="#{userBean.page}" /> 
</h:link> 

Подсказка:

Использования omnifaces о: парах, так как он обеспечивает атрибут конвертера, чтобы сохранить вашу логику преобразования DRY.

+0

Обычно вам это не нужно. Вы пытались использовать 'o: viewParam'. Кроме того, вы должны показать еще один код компонента, чтобы получить дополнительную помощь. – djmj