2008-10-01 28 views
6

Tôi gặp sự cố với mã Seam của mình và tôi dường như không thể tìm ra những gì tôi đang làm sai. Nó làm đầu tôi trong :) Dưới đây là một đoạn trích của stack trace:Vấn đề đường may: Không thể đặt giá trị trường theo phản ánh

Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field com.oobjects.sso.manager.home.PresenceHome.customerId to java.lang.String 

Tôi đang cố gắng để có được một bộ tham số trên URL của tôi thông qua thành một trong những hạt cà phê của tôi. Để làm điều này, tôi đã có những sản phẩm sau thiết lập trong pages.xml tôi:

<page view-id="/customer/presences.xhtml"> 
    <begin-conversation flush-mode="MANUAL" join="true" /> 
    <param name="customerId" value="#{presenceHome.customerId}" /> 
    <raise-event type="PresenceHome.init" /> 
    <navigation> 
    <rule if-outcome="persisted"> 
     <end-conversation /> 
     <redirect view-id="/customer/presences.xhtml" /> 
    </rule> 
    </navigation> 
</page> 

đậu của tôi bắt đầu như thế này:

@Name("presenceHome") 
@Scope(ScopeType.CONVERSATION) 
public class PresenceHome extends EntityHome<Presence> implements Serializable { 
    @In 
    private CustomerDao customerDao; 

    @In(required = false) 
    private Long presenceId; 

    @In(required = false) 
    private Long customerId; 

    private Customer customer; 

    // Getters, setters and other methods follow. They return the correct types defined above 
} 

Cuối cùng vào liên kết tôi sử dụng để liên kết một trang này sang trang tiếp theo sẽ như sau:

<s:link styleClass="#{selected == 'presences' ? 'selected' : ''}" 
    view="/customer/presences.xhtml" title="Presences" propagation="none"> 
    <f:param name="customerId" value="#{customerId}" /> 
    Presences 
</s:link> 

Tất cả điều này có vẻ hoạt động tốt. Khi tôi di chuột qua liên kết ở trên trong trang của mình, tôi nhận được một URL kết thúc bằng một cái gì đó như "? CustomerId = 123". Vì vậy, các tham số đang được chuyển qua và đó là một cái gì đó mà có thể dễ dàng chuyển đổi thành một loại dài. Nhưng vì lý do nào đó, nó không phải. Tôi đã làm những việc tương tự như vậy trước đây trong các dự án khác và nó đã hoạt động rồi. Tôi chỉ không thể nhìn thấy những gì nó không hoạt động ngay bây giờ.

Nếu tôi xóa phần tử khỏi tuyên bố trang của mình, tôi chuyển đến trang phạt.

Vì vậy, có ai có bất kỳ suy nghĩ nào không?

Trả lời

7

Bạn muốn thêm một công cụ chuyển đổi tập tin pages.xml của bạn. Như thế này:

<param name="customerId" 
     value="#{presenceHome.customerId}" 
converterId="javax.faces.Long" /> 

Xem ví dụ về đường may được cung cấp với đường may để biết thêm chi tiết.

0

thử: ... <f:param name="customerId" value="#{customerId.toString()}" /> ...

0

Mã của chúng tôi làm điều gì đó tương tự, nhưng với sự ID khách hàng tài sản trong lớp Java như là một String :

private String customerId; 

public String getCustomerId() { 
    return customerId; 
} 

public void setCustomerId(final String customerId) { 
    this.customerId = customerId; 
} 
0

Bạn có thể thử sử dụng trình chỉnh sửa thuộc tính.

Đặt này vào gói tương tự như đậu của bạn:

import java.beans.PropertyEditorSupport; 

public class PresenceHomeEditor extends PropertyEditorSupport { 
    public void setAsText(final String text) throws IllegalArgumentException { 
     try { 
      final Long value = Long.decode(text); 
      setValue(value); 
     } catch (final NumberFormatException e) { 
      super.setAsText(text); 
     } 
    } 
} 
Các vấn đề liên quan