2010-07-26 12 views
5

Mam ten kod działa w moim webapp:Making p: praca CommandButton jak H: przycisk

<h:button value="Edit user..." outcome="/public/user" > 
    <f:param name="userName" value="#{authBean.authUser}"/> 
</h:button> 

Co robi:

  1. To sprawia, że ​​przycisk wyślij GET
  2. Przechodzi określony parametr w adresie URL, dzięki czemu jest on niezrównany.

Co potrzebne:

  • To powinno działać jak H: przycisk powyżej (wysłać GET)
  • przycisk powinien wyglądać innych Primefaces przycisków (np ozdobiony obrazem ... itd.).

Jest to najbliżej mogę dostać:

<p:commandButton value="Edit user..." action="/public/user?faces-redirect=true" ajax="false" immediate="true" > 
    <f:param name="userName" value="#{authBean.authUser}"/> 
</p:commandButton> 

Wysyła POST, który pobiera przekierowany do nowego adresu URL z GET. Jednak parametr jest tracony w procesie.

Inny pomysł:

<p:linkButton value="Edit user..." href="http://localhost:8080/contextpath/faces/public/user.xhtml"> 
    <f:param name="userName" value="#{authBean.authUser}"/> 
</p:linkButton> 

Żądanie GET jest przerywana (??? zgodnie z Firebug) i bieżąca strona jest znowu pisał.

Jaki jest właściwy sposób na wykonanie tego?

UPDATE: to działa (na pustej stronie, bez p: DataTable):

<p:linkButton value="Edit user..." href="http://localhost:8080/contextpath/faces/public/user.xhtml?userName=myusername"> 

ale to nie:

<p:linkButton value="Edit user..." href="http://localhost:8080/contextpath/faces/public/user.xhtml?userName=myusername&secondParam=otherValue"> 

te ostatnie wyniki w:

500: javax.servlet.ServletException: Błąd analizy /sample0.xhtml: Błąd Tracing [wiersz: 14] The referec nce do encja "secondParam" musi kończyć się z ';' ogranicznik.


Update2: the & należy uciekł:

<p:linkButton value="Edit user..." href="http://localhost:8080/contextpath/faces/public/user.xhtml?userName=myusername&amp;secondParam=otherValue"> 

i wygląda dobrze ... ale ja wciąż GET i POST przerwana Odesłano:

alt text http://img64.imageshack.us/img64/1017/primefaceslinkbutton.jpg

To jest pełna pusta strona, którą próbowałem to z:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:c="http://java.sun.com/jsp/jstl/core" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:p="http://primefaces.prime.com.tr/ui"> 
    <h:head /> 
    <h:body> 
     <h:form> 
      <p:linkButton value="Click me" href="http://stackoverflow.com" /> 
     </h:form> 
    </h:body> 
</html> 

Wydanie Primefaces 2.1.

Odpowiedz

1

Użyj p:linkButton.


Aktualizacja: jak na swoje aktualizacji z przykładowym kodzie URL powinien być określony w atrybucie href, a nie w url attribtue. Zobacz także dokumentację tego komponentu, którą tutaj dołączyłem.

Symptomy przynajmniej brzmią, jakbyś wypalał asynchroniczne (Ajax) żądanie GET, a nie synchroniczne. FireBug rzeczywiście dałby tego rodzaju błąd, gdy żądanie jest uruchamiane w innej domenie.

Nie masz innych Javascriptów, które przeszkadzają/kolidują z domyślnym zachowaniem linkButton? Przycisk porusza się prostym kodem onclick="window.location=newurl;".


Aktualizacja 2: to działa, jeśli przetestować go samodzielnie w prosty stronie? Na przykład.

<!DOCTYPE html> 
<html xmlns="http://www.w3c.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.prime.com.tr/ui"> 
    <h:head> 
     <title>Test</title> 
    </h:head> 
    <h:body> 
     <p:linkButton value="test" href="http://stackoverflow.com" /> 
    </h:body> 
</html> 
+0

Próbowałem p: linkButton, ale to nie działa. Firebug mówi, że żądanie GET zostało przerwane, a aktualna strona jest ponownie POSTED. – egbokul

+0

Niestety, nie wykonałem pełnej kopii/wklejania. Używam atrybutu "href", "URL" nie jest nawet akceptowany przez Netbeans. Teraz sprawdzę inne javascript ... – egbokul

+0

Na pustej stronie p: linkButton działa ... sort. f: param nie działa. Jeśli podam parametr bezpośrednio w adresie URL (np. ".../user.xhtml? UserName = myusername") to działa. Kiedy określę jeszcze jeden parametr, Glassfish mówi: 500: javax.servlet.ServletException: Error Parsing /sample0.xhtml: Błąd śledzony [wiersz: 14] Odwołanie się do encji "relVerMin" musi kończyć się znakiem ";" ogranicznik. (RelVerMin był moim drugim parametrem, takim jak: ".../delrel.xhtml? relVerMaj = 1 & relVerMin = 0") – egbokul

3

W PrimeFaces 2.2., Wycofamy linkButton i wprowadzimy przycisk p :. Bilet wydania;

http://code.google.com/p/primefaces/issues/detail?id=1037

+0

Ah, miło. Czy mimo to możesz szczegółowo wyjaśnić konkretny problem? – BalusC

+0

OK, więc będę trzymać się h: przycisk bez obrazów na razie. Dziękuję BalusC za poświęcony czas i wysiłek, i oczywiście Cagatay za odpowiedź ;-) – egbokul

+0

Oto nowy p: button; http://www.primefaces.org:8080/prime-showcase-labs/ui/button.jsf –

Powiązane problemy