2010-06-09 38 views
7

Tôi muốn tạo nút điều hướng đến một URL khác và chuyển một số tham số yêu cầu thông qua trong URL. Các outputLink hoạt động nhưng tôi muốn một nút, commandButton có vẻ tốt nhưng tôi có thể vượt qua các tham số.Lệnh JSFNhập thông số URL

Có giải pháp nào không?

Trả lời

16

Các h:commandButton không cháy một yêu cầu GET, nhưng yêu cầu POST, vì vậy bạn không thể sử dụng nó. Nếu bạn đã có trên JSF 2.0 và trang mục tiêu là trong bối cảnh tương tự, sau đó bạn có thể sử dụng h:button cho việc này:

<h:button value="press here" outcome="otherViewId"> 
    <f:param name="param1" value="value1" /> 
    <f:param name="param2" value="value2" /> 
</h:button> 

(không h:form là cần thiết ở đây là trong h:outputLink). Điều này sẽ tạo ra một nút mà đi đến otherViewId.jsf?param1=value1&param2=value2.

Nhưng nếu bạn chưa ở trên JSF 2.0, thì tốt nhất là chỉ cần lấy CSS để tạo kiểu cho liên kết như nút.

<h:outputLink styleClass="button"> 

với một cái gì đó giống như

a.button { 
    display: inline-block; 
    background: lightgray; 
    border: 2px outset lightgray; 
    cursor: default; 
} 
a.button:active { 
    border-style: inset; 
} 
5

Với nút bạn kết hợp action, là phương pháp trong bean sao lưu Bạn có thể đặt thông số trong bean sao lưu và đọc chúng khi bạn nhấn nút, từ phương pháp được liên kết đến action. Phương thức hành động phải trả về String, sẽ được Trình xử lý điều hướng đọc để kiểm tra xem nó có phải di chuyển đến một trang mới hay không, theo cấu hình trong số faces-config.xml.

<h:form> 
    <h:commandButton value="Press here" action="#{myBean.action}"> 
     <f:setPropertyActionListener target="#{myBean.propertyName1}" value="propertyValue1" /> 
     <f:setPropertyActionListener target="#{myBean.propertyName2}" value="propertyValue2" /> 
    </h:commandButton> 
</h:form> 

Sao đậu:

package mypackage; 


public class MyBean { 

    // Init -------------------------------------------------------------------------------------- 

    private String propertyName1; 
    private String propertyName2; 

    // Actions ----------------------------------------------------------------------------------- 

    public void action() { 
     System.out.println("propertyName1: " + propertyName1); 
     System.out.println("propertyName2: " + propertyName2); 
    } 

    // Setters ----------------------------------------------------------------------------------- 

    public void setPropertyName1(String propertyName1) { 
     this.propertyName1 = propertyName1; 
    } 

    public void setPropertyName2(String propertyName2) { 
     this.propertyName2 = propertyName2; 
    } 

} 

Ví dụ này được lấy từ here (BalusC blog, có lẽ anh sẽ đến và nói với bạn để kiểm tra liên kết đó nhưng tôi nhanh hơn: P)

Tất nhiên để đạt được điều này đậu phải được đặt là session scoped. Nếu bạn muốn nó được request scoped bạn có thể làm theo các bước here

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