2008-10-01 2 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> 

Все это, кажется, работает нормально. Когда я наводил ссылку на ссылку выше на моей странице, я получаю URL-адрес, заканчивающийся чем-то вроде «customerId = 123». Таким образом, параметр передается, и это то, что можно легко преобразовать в длинный тип. Но по какой-то причине это не так. Раньше я делал подобные вещи в других проектах, и тогда это сработало. Я просто не могу понять, что он сейчас не работает.

Если я удалю элемент из объявления моей страницы, я доберусь до страницы в порядке.

Итак, есть ли у кого-нибудь мысли?

ответ

7

Вы хотите добавить конвертер в файл pages.xml. Например:

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

Подробнее см. Пример seampay, снабженный швом.

0

попробовать: ... <f:param name="customerId" value="#{customerId.toString()}" /> ...

0

Наш код делает что-то подобное, но с CUSTOMERID свойства в классе Java как Строка:

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); 
     } 
    } 
} 
Смежные вопросы