rich:calendar和"类'java.lang.String'没有属性......"错误

Fra*_*sco 1 java richfaces jsf-2

我有以下情况:

接口

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();}
Run Code Online (Sandbox Code Playgroud)

实施班级:

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;
}}
Run Code Online (Sandbox Code Playgroud)

模型:

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;
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

错误:

>[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
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我,告诉我我错过了什么,拜托?

Bal*_*usC 5

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

例如,如果您的视图中的某些内容事先listMode.setCreationDate()使用Stringas参数调用,则会发生这种情况.例如,通过一个<f:viewParam>,<h:inputHidden>,Converter-用于级,或任何其他返回一个String而不是所希望的对象类型.

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