2012-01-02 15 views
6

Na mojej stronie mam przycisk, który otwiera listę pozycji w wyskakującym okienku. Gdy wybiorę 1 pozycję na liście, chcę przekazać identyfikator elementu do brzegu mojej pierwszej strony. Czy to możliwe? Próbował to zrobić z a4j:jsFunction i a4j:param, ale to nie działa.Jak przekazać wartość parametru do a4j: jsFunction

To jest mój kod:

strona 1:

<a4j:jsFunction name="renderGuarantor" render="guarantor" actionListener="#{prospectDetail.setNewGuarantor}"> 
    <a4j:param name="param1" assignTo="#{prospectDetail.newGuarantorId}" /> 
</a4j:jsFunction> 

popuppage:

<h:outputLink value="" onclick="window.opener.renderGuarantor(#{applicant.deposit_id});window.close();"> 
    <h:graphicImage style="padding:0 1px; border:0" value="${path.staticRootUrl}images/confirm.gif" alt="${msg.applicantslist_select}" title="${msg.applicantslist_select}"/> 
</h:outputLink> 

I to jest kod backing bean na pierwszej stronie

private Integer newGuarantorId; 
public void setNewGuarantor() { 
    guarantor = newGuarantorId; 
} 

public Integer getNewGuarantorId() { 
    return newGuarantorId; 
} 

public void setNewGuarantorId(Integer newGuarantorId) { 
    this.newGuarantorId = newGuarantorId; 
} 

Po wybraniu w okienku wyskakującym wywoływana jest metoda w moim bufecie, ale newGuarantorId ma wartość null, a setNewGuarantorId nigdy nie jest wywoływana.

Czy istnieje rozwiązanie mojego problemu?

+0

Czy jesteś pewien, że '# {request.deposit_id}' nie ma wartości NULL w nowym oknie? – Nikhil

+0

Tak, jest wypełniony prawidłowym identyfikatorem. – roel

+0

Hmm .. to dziwne, nic nie wygląda źle .. Nie ma odpowiedzi na twoje pytanie, ale spróbuj tego obejścia - zamiast przypisywania wartości do 'gwarantId', utrzymuj parametr jako iw metodzie 'actionListener' pobierz ten' param1' z żądania jako 'String param1 = FacesContext.getCurrentInstance(). getExternalContext(). getRequestParameterMap(). get (" param1 ");'. A następnie przekonwertuj ten parametr na "int" i wykorzystaj go dalej. To powinno działać. – Nikhil

Odpowiedz

5

Hmm .. to jest to dziwne, nic nie wygląda wrong..Not odpowiedź na swoje pytanie, ale spróbuj tego obejścia - zamiast przypisywania wartości do guarantorId zachować param jako <a4j:param name="param1"/> iw sposobie actionListener pobrać tę param1 przeprowadzoną żądanie jako String param1 = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().‌​get("param1");. A następnie przekonwertuj ten parametr na int i wykorzystaj go dalej. To powinno zadziałać

1

Myślę, że można spróbować to:

<a4j:jsFunction name="renderGuarantor" render="guarantor" 
       actionListener="#{prospectDetail.setNewGuarantor(prospectDetail.newGuarantorId)}" /> 

A w zarządzanym fasoli, określić metodę setNewGuarantor następująco:

public void setNewGuarantor(int newGuarantorId) { 
    guarantor = newGuarantorId; 
} 
3

Spróbuj przełączania z actionListener do action:

<a4j:jsFunction name="renderGuarantor" render="guarantor" action="#{prospectDetail.setNewGuarantor}"> 
    <a4j:param name="param1" assignTo="#{prospectDetail.newGuarantorId}"/> 
</a4j:jsFunction> 

Tutaj zaleca się czytanie na temat: a4j:jsFunction

Powiązane problemy