2013-05-24 39 views
5

Mục tiêu của tôi là lấy chiều rộng màn hình, chiều cao, v.v., thành một phiên bean trong JSF. Theo các ví dụ tôi đã tìm thấy, cách để làm điều này là thêm một param vào một commandButton với một giá trị là javascript. Giá trị sau đó được chuyển sang biến bean assignTo. Thuộc tính noEscape được cho là tạo ra nó để giá trị được truyền thay vì tên biến.Chuyển các giá trị JavaScript cho Bean bằng a4j: param

Điều này hầu như hoạt động. Điều xảy ra là tên biến chữ, ví dụ: "screen.height" gió lên trên đậu thay vì một số, ví dụ: 600. Tôi đã thử thay đổi nó để nó gọi một hàm kịch bản nhưng điều đó không giúp được gì. (Lưu ý, tôi đặt các params bên trong một commandButton bởi vì các ví dụ cho thấy nó theo cách đó và nút này là một nơi thuận tiện và nó là cần thiết cho các ứng dụng anyway).

Tôi có đoạn code sau

<h:commandButton value="Log In" action="#{loginBean.login}" styleClass="buttons"> 
    <a4j:param name="w" value="getWidth()" assignTo="#{browser.screenWidth}" noEscape="true" /> 
    <a4j:param name="h" value="screen.height" assignTo="#{browser.screenHeight}" noEscape="true" /> 
    <a4j:param name="a" value="navigator.userAgent" assignTo="#{browser.userAgent}" noEscape="true" /> 
</h:commandButton> 

nơi

<script> 
    function getWidth() { 
    return screen.width; 
    } 
</script> 

Một lần nữa, vấn đề cụ thể là tôi nhận được tên biến vào đậu, không phải là giá trị biến. Bất kì sự trợ giúp nào đều được đánh giá cao.

Trả lời

6

Phương pháp của bạn không thể hoạt động vì giá trị a4j:param không được đánh giá bằng JavaScript khi được sử dụng với đồng bằng h:commandButton. Bạn cần sử dụng số a4j:commandButton để thay thế.

<a4j:commandButton value="Log In" action="#{loginBean.login}" styleClass="buttons"> 
    <a4j:param name="w" value="getWidth()" assignTo="#{browser.screenWidth}" noEscape="true" /> 
    <a4j:param name="h" value="screen.height" assignTo="#{browser.screenHeight}" noEscape="true" /> 
    <a4j:param name="a" value="navigator.userAgent" assignTo="#{browser.userAgent}" noEscape="true" /> 
</a4j:commandButton> 

Một giải phápa4j:jsFunction, với điều này bạn sẽ có thể gửi các giá trị Javascript của bạn vào đậu.

Xem mã: đang

<a4j:jsFunction name="login" action="#{loginBean.login}"> 
    <a4j:param name="screenWidth" assignTo="#{loginBean.screenWidth}" /> 
    <a4j:param name="screenHeight" assignTo="#{loginBean.screenHeight}" /> 
    <a4j:param name="userAgent" assignTo="#{loginBean.userAgent}" /> 
</a4j:jsFunction> 

<input type="button" onclick="login(screen.width,screen.height,navigator.userAgent);" /> 

Bean:

@ManagedBean 
@ViewScoped 
public class TestJavaScriptActions 
{ 
    private Integer m_iScreenWidth; 
    private Integer m_iScreenHeight; 
    private String m_sUserAgent; 

    public void setScreenWidth(Integer p_iScreenWidth) 
    { 
     m_iScreenWidth = p_iScreenWidth; 
    } 

    public Integer getScreenWidth() 
    { 
     return m_iScreenWidth; 
    } 

    public void setScreenHeight(Integer p_iScreenHeight) 
    { 
     m_iScreenHeight = p_iScreenHeight; 
    } 

    public Integer getScreenHeight() 
    { 
     return m_iScreenHeight; 
    } 

    public void setUserAgent(String p_sUserAgent) 
    { 
     m_sUserAgent = p_sUserAgent; 
    } 

    public String getUserAgent() 
    { 
     return m_sUserAgent; 
    } 

    public void login() 
    { 
     System.out.println(getScreenWidth() + ", " + getScreenHeight() + ", " + getUserAgent()); 
    } 
} 

Lưu ý:

Tôi đã mất vĩ độ di chuyển mỗi getter/setter bên trong cùng một hạt giống như hành động cho sự đơn giản, cũng chang e số h:commandButton đến nút input đồng bằng. Thông tin

thêm:

+0

Cảm ơn. Điều này khắc phục sự cố của tôi. Không hoàn toàn chắc chắn làm thế nào tôi bỏ lỡ phần h vs a4j. – wjr

+0

@ user2418375 Rất vui khi được giúp đỡ, đừng quên đánh dấu là đã chấp nhận! –

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