【问题标题】:f:viewparam not set in beanf:viewparam 未在 bean 中设置
【发布时间】:2013-12-18 01:41:44
【问题描述】:

我有一个对象列表,每个条目都有一个指向对象详细视图的链接。 链接的代码是

<h:link outcome="#{detailViewPageName}" rendered="#{listRow.rowData.dbId != null}">
     <f:param name="faces-redirect" value="true" />
     <f:param name="phoneNr" value="#{listRow.rowData.phoneNr}" />
     <f:param name="fromDate" value="#{listRow.rowData.fromDate}" />
     <f:param name="toDate" value="#{listRow.rowData.toDate}" />
       #{listRow.rowData.phoneNr == "-1" ? msg.subscriptionPhoneNumberUnknown : listRow.rowData.phoneNr}
</h:link>

还有一个前任。结果链接是:

http://bla-bla.bla/cmn-web/view/cmn/billDetailView.xhtml?faces-redirect=true&phoneNr=41798009726&fromDate=2013-01-01&toDate=2013-01-31

详细视图的 bean 具有使用 getter 和 setter 定义的参数,并且页面也定义了 f:viewparam:

<ui:define name="metadata">
   <f:metadata>
      <f:viewParam name="phoneNr" value="#{billDetailController.model.phoneNr}"/>
      <f:viewParam name="fromDate" value="#{billDetailController.model.fromDate}"/>
      <f:viewParam name="toDate" value="#{billDetailController.model.toDate}"/>

      <f:event listener="#{billDetailController.selectData}" type="preRenderView" />
   </f:metadata>
</ui:define>

问题是detail bean中的值永远不会设置......

现在我在调试器中看到的是,在单击链接后(我假设在加载页面并调用 selectData 方法之前)参数的 getter 被调用,而不是 setter。

bean 是 ManagedBean 和 CustomScoped。

我错过了什么?

编辑:

Bean(一个非常简单的):

@ManagedBean( name = "billDetailModel" )
@ViewScoped
public class BillDetailModel extends DetailModel
{
  private String    phoneNr;
  private Date  fromDate;
  private Date    toDate;

  public String getPhoneNr()
  {
    return phoneNr;
  }

  public void setPhoneNr( String phoneNr )
  {
    this.phoneNr = phoneNr;
  }

  public Date getFromDate()
  {
    return fromDate;
  }

  public void setFromDate( Date fromDate )
  {
    this.fromDate = fromDate;
  }

  public Date getToDate()
  {
    return toDate;
  }

  public void setToDate( Date toDate )
  {
    this.toDate = toDate;
  }
}

【问题讨论】:

  • 使用提供的代码很难测试。如果将 bean 更改为 @ViewScoped 会发生什么?
  • @ViewScoped是一样的...
  • 养成在视图某处始终使用&lt;h:messages&gt; 的习惯。否则你永远不知道你错过了什么。
  • @BalusC 一如既往的正确提示...Conversion Error setting value '2013-01-01' for 'null Converter'. Conversion Error setting value '2013-01-31' for 'null Converter'.

标签: jsf-2 viewparams


【解决方案1】:

也许在 JSF 更新阶段检查是否有任何ConverterExceptions。如果你例如尝试将日期设置为期望日期或日历对象的 getter/setter,如果没有适当的 DateConverter 介于两者之间,这可能无法正常工作。

希望对您有所帮助...

【讨论】:

  • 如果 getter/setter 需要一个像 java.util.Date 或 java.util.Calendar 这样的其他对象,并且这个给定的类 (@FacesConverter(forClass=YourClassHere.class)) 有一个合适的 Faces-Converter。它会自动转换。因为您没有发布托管 bean 部分,所以我只是想确保您期望那里有一个字符串... :-)
  • 你是对的,bean 需要两个日期和一个字符串(请参阅问题中的编辑)。我会尝试添加转换器,看看它是否工作......
猜你喜欢
  • 2013-09-20
  • 2012-07-01
  • 2012-11-09
  • 2013-10-10
  • 2014-08-23
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
  • 2017-06-29
相关资源
最近更新 更多