Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Seam Problem: Could not set field value by reflection

Tags:

java

seam

I'm having a problem with my Seam code and I can't seem to figure out what I'm doing wrong. It's doing my head in :) Here's an excerpt of the stack trace:

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

I'm trying to get a parameter set on my URL passed into one of my beans. To do this, I've got the following set up in my 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>

My bean starts like this:

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

Finally the link I use to link one one page to the next looks like this:

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

All this seems to work fine. When I hover over the link above in my page, I get a URL ending in something like "?customerId=123". So the parameter is being passed over and it's something that can be easily converted into a Long type. But for some reason, it's not. I've done similar things to this before in other projects and it's worked then. I just can't see what it isn't working now.

If I remove the element from my page declaration, I get through to the page fine.

So, does anyone have any thoughts?

like image 213
Lee Theobald Avatar asked Oct 01 '08 08:10

Lee Theobald


1 Answers

You want to add a converter to your pages.xml file. Like this:

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

See the seampay example provided with seam for more details.

like image 122
Joe Dean Avatar answered Sep 28 '22 06:09

Joe Dean