2010-07-26 26 views
5

tôi có mã làm việc này trong webapp của tôi:Làm p: CommandButton công việc như h: nút

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

Những gì nó:

  1. Nó làm cho nút gửi một GET
  2. Nó đi thông số được chỉ định trong URL, làm cho nó có thể đánh dấu trang.

Những gì tôi cần:

  • Nó sẽ làm việc như h: nút ở trên (gửi GET)
  • nút nên trông giống như nút Primefaces khác (ví dụ như trang trí với một hình ảnh ... vv.).

này là gần nhất tôi có thể nhận được:

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

Nó sẽ gửi một POST đó được chuyển hướng đến URL mới với một GET. Tuy nhiên, tham số bị mất trong quá trình này.

Một ý tưởng:

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

Yêu cầu GET được hủy bỏ (??? theo Firebug) và trang hiện tại được đăng tải lại.

Cách thích hợp để thực hiện việc này là gì?

UPDATE: công trình này (trên một trang trắng tinh, không có p: DataTable):

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

nhưng điều này không:

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

kết quả sau in:

500: javax.servlet.ServletException: Lỗi phân tích cú pháp /sample0.xhtml: Lỗi Đã theo dõi [dòng: 14] Yêu cầu nce đến pháp nhân "secondParam" phải kết thúc bằng ';' dấu phân tách.


UPDATE2: các & nên được thoát:

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

và nó có vẻ tốt ... nhưng tôi vẫn nhận được GET và POST hủy bỏ resent:

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

Đây là trang trống đầy đủ mà tôi đã cố gắng nó với:

<?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> 

Bản phát hành 2.1 của Primefaces.

Trả lời

1

Sử dụng p:linkButton.


Cập nhật: theo cập nhật của bạn với ví dụ mã, URL nên được quy định tại href thuộc tính, không phải trong url attribtue. Ngoài ra, hãy xem tài liệu của thành phần mà tôi đã liên kết ở trên.

Các triệu chứng ít nhất có vẻ như thể bạn đang kích hoạt yêu cầu GET không đồng bộ (Ajax), không phải là yêu cầu đồng bộ. FireBug sau đó sẽ thực sự cung cấp loại lỗi này khi yêu cầu được kích hoạt trên một miền khác.

Bạn không có một số Javascripts khác đang gây rối/va chạm với hành vi mặc định của linkButton? Nút đang điều hướng bằng một đơn giản onclick="window.location=newurl;".


Cập nhật 2: nào nó hoạt động nếu bạn kiểm tra nó độc lập trong một trang đơn giản? Ví dụ.

<!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

Tôi đã thử p: linkButton nhưng không hoạt động. Firebug cho biết yêu cầu GET bị hủy bỏ và trang hiện tại được đăng lại. – egbokul

+0

Rất tiếc, tôi không sao chép/dán hoàn toàn. Tôi đang sử dụng thuộc tính "href", "url" thậm chí không được Netbeans chấp nhận. Bây giờ tôi sẽ kiểm tra javascript khác ... – egbokul

+0

Trên một trang trống p: linkButton hoạt động ... loại. f: param không hoạt động. Nếu tôi chỉ định tham số trong URL trực tiếp (ví dụ: ".../user.xhtml? UserName = myusername") thì nó hoạt động. Khi tôi chỉ định một tham số nữa, Glassfish nói 500: javax.servlet.ServletException: Lỗi Phân tích cú pháp /sample0.xhtml: Lỗi Truy tìm [dòng: 14] Tham chiếu đến thực thể "relVerMin" phải kết thúc bằng ';' dấu phân tách. (relVerMin là tham số thứ hai của tôi, chẳng hạn như: ".../delrel.xhtml? relVerMaj = 1 & relVerMin = 0") – egbokul

3

Trong PrimeFaces 2.2., Chúng tôi sẽ ngừng liên kếtButton và giới thiệu nút p:. Phát hành vé;

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

+0

Ah, hay. Bạn có thể giải thích chi tiết vấn đề cụ thể không? – BalusC

+0

OK, vì vậy tôi sẽ dính vào nút h: không có hình ảnh ngay bây giờ. Cảm ơn bạn BalusC cho thời gian và công sức của bạn, và tất nhiên Cagatay cho câu trả lời ;-) – egbokul

+0

Đây là nút p: mới; http://www.primefaces.org:8080/prime-showcase-labs/ui/button.jsf –

Các vấn đề liên quan