2008-10-01 13 views
6

द्वारा फ़ील्ड मान सेट नहीं किया जा सका मुझे अपने सीम कोड में कोई समस्या है और मुझे यह पता लगाना प्रतीत नहीं होता कि मैं क्या कर रहा हूं। यह में मेरे सिर कर रहा है :) यहाँ स्टैक ट्रेस का एक अंश है:सीम समस्या: प्रतिबिंब

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

मैं अपने URL मुझे अपने सेम में से एक में पारित कर दिया पर एक पैरामीटर सेट प्राप्त करने के लिए कोशिश कर रहा हूँ। ऐसा करने के लिए, मुझे मिल गया है के बाद मेरे pages.xml में स्थापित:

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

मेरे सेम इस तरह शुरू होता है:

@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 
} 

अंत में लिंक मैं उपयोग करने के लिए एक के बाद एक पेज से जोड़ने के लिए अगला इस तरह दिखता है:

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

यह सब ठीक काम करने लगता है। जब मैं अपने पृष्ठ में उपरोक्त लिंक पर होवर करता हूं, तो मुझे "? ग्राहक आईडी = 123" जैसे कुछ में समाप्त होने वाला यूआरएल मिलता है। तो पैरामीटर पारित किया जा रहा है और यह ऐसा कुछ है जिसे आसानी से लंबे प्रकार में परिवर्तित किया जा सकता है। लेकिन किसी कारण से, यह नहीं है। मैंने अन्य परियोजनाओं में इससे पहले इसी तरह की चीजें की हैं और फिर यह काम किया है। मैं अभी नहीं देख सकता कि यह अब क्या काम नहीं कर रहा है।

यदि मैं अपने पृष्ठ की घोषणा से तत्व को हटा देता हूं, तो मैं पृष्ठ को ठीक से प्राप्त करता हूं।

तो, क्या किसी के पास कोई विचार है?

उत्तर

7

आप अपने pages.xml फाइल करने के लिए एक कनवर्टर जोड़ना चाहते हैं। इस तरह:

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

अधिक जानकारी के लिए सीम के साथ प्रदान किए गए समुद्र के उदाहरण देखें।

0

कोशिश: ... <f:param name="customerId" value="#{customerId.toString()}" /> ...

0

हमारे कोड कुछ ऐसा ही है, लेकिन CUSTOMERID एक स्ट्रिंग के रूप में जावा वर्ग में संपत्ति के साथ:

private String customerId; 

public String getCustomerId() { 
    return customerId; 
} 

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

आप एक संपत्ति संपादक का उपयोग करने का प्रयास कर सकते हैं।

एक ही पैकेज में अपने सेम के रूप में इस रखो:

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); 
     } 
    } 
}