【问题标题】:f:param with conditionf:带条件的参数
【发布时间】:2012-05-04 17:29:33
【问题描述】:

我有f:param,如下所示...

<f:param name="NDCID" value="#{selectedMedicationInfoBean.NDCID}"></f:param>
<f:param name="insuranceID" value="#{selectedMedicationInfoBean.insurance.id}"></f:param>

在少数情况下

#{selectedMedicationInfoBean.insurance.id}

为空。我们能阻止它吗?我不能在 JSF 表达式中使用车削运算符。

<f:param name="insuranceID" value="#{selectedMedicationInfoBean.insurance.id=null?'':selectedMedicationInfoBean.insurance.id}">

还有其他方法吗?


功能要求:第1页有detail的链接。这将在 page2 上显示详细信息。作为参数需要传递大约 6 个参数。在这些参数的基础上,详细页面将生成信息。

问题在于这 6 个参数 2 可能为空,导致以下错误的原因出现在视图 page1

java.lang.NullPointerException
com.sun.faces.renderkit.RenderKitUtils.getCommandLinkOnClickScript(RenderKitUtils.java:934)
com.sun.faces.renderkit.html_basic.CommandLinkRenderer.getOnClickScript(CommandLinkRenderer.java:295)
com.sun.faces.renderkit.html_basic.CommandLinkRenderer.renderAsActive(CommandLinkRenderer.java:357)
com.sun.faces.renderkit.html_basic.CommandLinkRenderer.encodeBegin(CommandLinkRenderer.java:165)
javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:788)
org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChild(RendererUtils.java:433)
org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChildren(RendererUtils.java:419)
org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChild(RendererUtils.java:440)

【问题讨论】:

  • 功能需求究竟是什么?这样我们就可以更好地理解为什么发送一个空/null参数是一个问题。
  • @BalusC ,我已将我的显示名称设置为“Guruji”,这意味着“老师”,但我可以说你是这个 JSF 的大师。非常感谢您的快速回复。
  • 哦,您使用的是旧的 JSF 1.2。在未来的问题中,请提及确切的 JSF impl/version。我会发布一个答案。

标签: java jsf


【解决方案1】:

该异常是由旧的 Mojarra 1.2 错误引起的,当 &lt;f:param&gt; 值为 null 时,该错误确实会出现。它已在 Mojarra 1.2_05 中修复(或者可能是之前或之后的一个版本,不确定了,已经超过 6 年了)。只需升级到目前已在 1.2_15 的最新 Mojarra 1.2。

另一种方法是将其包装在&lt;c:if&gt; 中,但这很丑陋,而且如果selectedMedicationInfoBean 被声明为某个父UIData 组件的var,也将不起作用。

<c:if test="${not empty selectedMedicationInfoBean.insurance.id}">
    <f:param name="insuranceID" value="#{selectedMedicationInfoBean.insurance.id}" />
</c:if>

另一种选择是指定默认值0-1,并在控制器中进行相应处理。

<f:param name="insuranceID" value="#{not empty selectedMedicationInfoBean.insurance.id ? selectedMedicationInfoBean.insurance.id : -1}" />

升级是最好的选择。你不想和史前图书馆坐在一起。

【讨论】:

  • 但是根据stackoverflow.com/questions/10418413/…,如果我的链接在数据表中,会不会发生冲突?
  • 如果 selectMEdicationInfoBean 由其 var 定义,那么是的,它会导致问题。你真的需要升级到更新的 Mojarra 1.2 版本。
  • 是的,它来自var... :(
猜你喜欢
  • 1970-01-01
  • 2013-01-28
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-05
  • 1970-01-01
相关资源
最近更新 更多