Seam Component Property Error (Weirdness)
nathandennis May 25, 2007 2:34 AMJboss 4.0.5
seam 1.2 patch1
postgres
blah, blah, blah
i recently had what i believe to be a strange occurrence while writing a very simple app.
pay attention to destaddress property of Formmail...
@Entity
@Table(name = "formmail")
@Name("formmail")
public class Formmail implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
*
*/
private String form;
private String destaddress;
@Id
@NotNull
@Length(max = 10)
@Column(name="form")
public String getForm() {
return this.form;
}
public void setForm(String form) {
this.form = form;
}
@Length(max = 80)
@Column(name="destaddress")
public String getDestAddress() {
return this.destaddress;
}
public void setDestAddress(String destaddress) {
this.destaddress = destaddress;
}
@Override
public String toString()
{
return "Formmail(" + form + "," + destaddress + ")";
}
}
****************
import javax.ejb.Local;
@Local
public interface FormmailSearch {
public int getPageSize();
public void setPageSize(int pageSize);
public String getSearchString();
public void setSearchString(String searchString);
public String getSearchPattern();
public void find();
public void nextPage();
public boolean isNextPageAvailable();
public void destroy();
}
*********************
//
@Stateful
@Name("formmailSearch")
@Scope(ScopeType.SESSION)
@Restrict("#{identity.loggedIn}")
public class FormmailSearchAction implements FormmailSearch
{
@PersistenceContext
private EntityManager em;
private String searchString;
private int pageSize = 10;
private int page;
@DataModel
private List<Formmail> formmails;
public void find()
{
page = 0;
queryFormmails();
}
public void nextPage()
{
page++;
queryFormmails();
}
@SuppressWarnings("unchecked")
private void queryFormmails()
{
formmails = em.createQuery("select f from Formmail f where lower(f.form) like #{pattern}")
.setMaxResults(pageSize)
.setFirstResult( page * pageSize )
.getResultList();
}
public boolean isNextPageAvailable()
{
return formmails!=null && formmails.size()==pageSize;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
@Factory(value="pattern", scope=ScopeType.EVENT)
public String getSearchPattern()
{
return searchString==null ?
"%" : '%' + searchString.toLowerCase().replace('*', '%') + '%';
}
public String getSearchString()
{
return searchString;
}
public void setSearchString(String searchString)
{
this.searchString = searchString;
}
@Destroy @Remove
public void destroy() {}
****************
<a:outputPanel id="searchResults">
<div class="section">
<h:outputText value="No Entrys Like That Found" rendered="#{formmails != null and formmails.rowCount==0}"/>
<h:dataTable id="formmails" value="#{formmails}" var="mail" rendered="#{formmails.rowCount>0}">
<h:column>
<f:facet name="header">Form:</f:facet>
#{mail.form}
</h:column>
<h:column>
<f:facet name="header">Destination Address</f:facet>
#{mail.destaddress}
</h:column>
<h:column>
<s:link id="viewFormmail" value="View Record" action="#{formmailPersist.selectFormmail(mail)}"/>
</h:column>
</h:dataTable>
<s:link value="More results" action="#{formmailSearch.nextPage}" rendered="#{formmailSearch.nextPageAvailable}"/>
</div>
</a:outputPanel>
*******************
this gave me a error
Exception during request processing: javax.servlet.ServletException: /FormmailList.xhtml: Bean: com.foo.Formmail, property: destaddress
......
after banging my head against the table for a while,, i figured out that Seam had changed the property name from destaddress to destAddress.
WHY??
I went back and change the name of the column in my db,, then alter my code a little... none of the weird junk,,, just with destaddress-->destAddress.
explanation anyone???
what don't i understand??
i mean randomly mapping characters in a variable name string to upper case makes the mapping a little difficult if you catch my drift.