2012-05-06 31 views
20

Toán tử điều kiện hoạt động trong nhiều thuộc tính như "giá trị" được hiển thị "" và các giá trị khác.Có thể sử dụng toán tử điều kiện EL trong thuộc tính action không?

Nhưng nó không hoạt động? Hay tôi làm sai?

<h:commandLink action="#{true ? bean.methodTrue() : bean.methodFalse()}"/> 

Lỗi: javax.el.ELException: Không phải là một phương pháp biểu thức hợp lệ

(tôi nhận ra nó bằng cách sử primefaces thuộc tính hành động ajax)

+1

Theo đó, nó không phải là có thể [EL có điều kiện Phương pháp biểu thức] (http://stackoverflow.com/questions/5433876/el-conditional-method-expression) – Fallup

+0

cảm ơn, hy vọng điều này được được giải quyết trong các bản cập nhật trong tương lai – djmj

Trả lời

44

này không được hỗ trợ. Thuộc tính action được cho là MethodExpression, nhưng toán tử điều kiện làm cho nó trở thành cú pháp ValueExpression. Tôi không nghĩ rằng điều này sẽ được hỗ trợ cho MethodExpression s trong EL.

Bạn có về cơ bản 2 lựa chọn:

  1. Tạo một phương thức hành động đơn lẻ mà các đại biểu công việc.

    <h:commandButton ... action="#{bean.method}" /> 
    

    với

    public String method() { 
        return condition ? methodTrue() : methodFalse(); 
    } 
    

    Nếu cần thiết, vượt qua nó trong như là đối số phương pháp mà theo #{bean.method(condition)}.

  2. Hoặc, có điều kiện hiển thị 2 nút.

    <h:commandButton ... action="#{bean.methodTrue}" rendered="#{bean.condition}" /> 
    <h:commandButton ... action="#{bean.methodFalse}" rendered="#{not bean.conditon}" /> 
    
+1

Câu trả lời hay như mọi khi – hendrix

+0

Điều gì là thích hợp hơn? – alexander

+1

@ Alex: cách phù hợp với mô hình của bạn nhất. Tuy nhiên, cách thứ hai có yêu cầu bổ sung rằng điều kiện phải được bảo toàn trong yêu cầu, tốt nhất là đạt được bằng cách đặt bean trong phạm vi khung nhìn, bạn sẽ vấp ngã khi vấn đề được mô tả là # 5 trong http: // stackoverflow. com/questions/2118656/commandlink-commandbutton-ajax-backed-bean-action-listener-method-not-invoked – BalusC

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