rich:calendar和“类'java.lang.String'不具有属性..."错误 [英] rich:calendar and "The class 'java.lang.String' does not have the property ..." error

查看:149
本文介绍了rich:calendar和“类'java.lang.String'不具有属性..."错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下情况:

界面

public interface Ranged{
public Object getRangeStart();
public Object getRangeEnd();

public void setRangeStart(Object rangeStart);
public void setRangeEnd(Object rangeEnd);

public void setRange(boolean isRange);
public boolean getRange();}

实施类:

public class CreationDateRange implements Ranged, Serializable{
private static final long   serialVersionUID    = SerialVersionUID.getSerialVersionUID();

public DateRange()
{
    super();
}

private Date    dateFrom;
private Date    dateTo;
private boolean isRange = false;

public Object getRangeStart()
{
    return (Date)dateFrom;
}

public Object getRangeEnd()
{
    return (Date)dateTo;
}

public void setRangeStart( Object from )
{
    this.dateFrom = (Date)from;
}

public void setRangeEnd( Object to )
{
    this.dateTo = (Date)to;
}

public void setRange( boolean isRange )
{
    this.isRange = isRange;
}

public boolean getRange()
{
    return isRange;
}}

型号:

private Object  updateDate  = new DateRange();

private Object  creationDate    = new DateRange();

public void setUpdateDate( Object updateDate )
{
    this.updateDate = updateDate;
}

public Object getUpdateDate()
{
    return updateDate;
}

public void setCreationDate( Object creationDate )
{
    this.creationDate = creationDate;
}

public Object getCreationDate()
{
    return creationDate;
}

jsf:

<f:viewParam name="creationDate" value="#{doiListController.model.creationDate}"/>
<f:viewParam name="updateDate" value="#{doiListController.model.updateDate}"/>
...
<td style="font-size: 5pt; border: 0; min-width:60px">
  <rich:calendar value="#{listModel.creationDate.rangeStart}"
        datePattern="yyyy-MM-dd" enableManualInput="true"
        rendered="#{listModel.creationDate.range}">
    <f:convertDateTime pattern="yyyy-mm-dd" />
  </rich:calendar>
</td>

错误:

>[exec] javax.faces.component.UpdateModelException: javax.el.PropertyNotFoundException: /view/doi/doiListView.xhtml @90,59 value="#{listModel.creationDate.rangeStart}": The cla
ss 'java.lang.String' does not have the property 'rangeStart'.
     [exec]     at javax.faces.component.UIInput.updateModel(UIInput.java:853)
     [exec]     at javax.faces.component.UIInput.processUpdates(UIInput.java:735)
     [exec]     at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1242)
     [exec]     at javax.faces.component.UIForm.processUpdates(UIForm.java:281)
     [exec]     at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1242)
     [exec]     at javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:1231)
     [exec]     at com.sun.faces.lifecycle.UpdateModelValuesPhase.execute(UpdateModelValuesPhase.java:78)
     [exec]     at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
     [exec]     at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
     [exec]     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
     [exec]     at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
     [exec]     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
     [exec]     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
     [exec]     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
     [exec]     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
     [exec]     at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
     [exec]     at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
     [exec]     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
     [exec]     at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326)
     [exec]     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
     [exec]     at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
     [exec]     at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
     [exec]     at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
     [exec]     at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
     [exec]     at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
     [exec]     at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
     [exec]     at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
     [exec]     at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
     [exec]     at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
     [exec]     at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
     [exec]     at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
     [exec]     at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
     [exec]     at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
     [exec]     at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
     [exec]     at java.lang.Thread.run(Thread.java:619)
     [exec] Caused by: javax.el.PropertyNotFoundException: /view/doi/doiListView.xhtml @90,59 value="#{listModel.creationDate.rangeStart}": The class 'java.lang.String' does not ha
ve the property 'rangeStart'.
     [exec]     at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:133)
     [exec]     at javax.faces.component.UIInput.updateModel(UIInput.java:818)
     [exec]     ... 34 more

有人可以帮我说我想念的是什么吗?

Can someone help me and say me what am I missing, please?

推荐答案

在表单提交的更新模型值阶段,异常和堆栈跟踪表明#{listModel.creationDate}实际上是 一个String请求.

The exception and stacktrace is telling that #{listModel.creationDate} is actually a String during the update model values phase of the form submit request.

例如,如果您视图中的某事事先使用String作为参数调用了listMode.setCreationDate(),则可能会发生这种情况.例如,使用<f:viewParam><h:inputHidden>Converter -for-class或其他方法返回String而不是所需的对象类型.

That can for example happen if something in your view has called listMode.setCreationDate() with a String as argument beforehand. For example, by a <f:viewParam>, <h:inputHidden>, Converter-for-class, or whatever else is returning a String instead of the desired object type.

在setter方法上放置一个断点,并在堆栈中跟踪根本原因.另外,您也可以将Object类型替换为Ranged类型或更具体的名称,以便JSF可能抛出/显示转换异常/错误,这通常更容易解释.

Put a breakpoint on the setter method and track the root cause down in the stack. Alternatively, you can also replace Object type by Ranged type or somehing more specific, so that JSF would possibly throw/display a conversion exception/error which is usually more self-explaining.

这篇关于rich:calendar和“类'java.lang.String'不具有属性..."错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆