Apache Trinidad tr:panelTabbed始终验证当前选项卡的内容

时间:2011-08-19 07:14:02

标签: jsf trinidad

我遇到了Apache Trinidad tr:panelTabbed组件的问题。我试图将不同的表单放入此组件的选项卡(tr:showDetailItem)中。这是第一次尝试,根本不起作用(我得到一个NullPointerException,org.apache.myfaces.trinidadinternal.ui.laf.base.xhtml.FormValueRenderer.addNeededValue(FormValueRenderer.java:126):

<tr:panelTabbed>
  <tr:showDetailItem text="First tab">
    <tr:form>
      <tr:inputText label="Value 1" value="#{myBean.someValue1}" required="true" />
      <tr:commandButton text="Save Value 1" actionListener="#{myBean.saveValue1}" />
    </tr:form>
  </tr:showDetailItem>
  <tr:showDetailItem text="Second tab">
    <tr:form>
      <tr:inputText label="Value 2" value="#{myBean.someValue2}" required="true" />
      <tr:commandButton text="Save Value 2" actionListener="#{myBean.saveValue2}" />
   </tr:form>
  </tr:showDetailItem>
</tr:panelTabbed>

因为当我的tr:form标签中没有内容时也会发生此错误,因此它与我自己的Java bean无关。

我发现tr:panelTabbed必须放在tr:form标签内。由于不允许使用其他表单标记中的一个表单标记(这又导致上述异常),我将我的代码更改为:

<tr:form>
  <tr:panelTabbed>
    <tr:showDetailItem text="First tab">
      <tr:inputText label="Value 1" value="#{myBean.someValue1}" required="true" />
      <tr:commandButton text="Save Value 1" actionListener="#{myBean.saveValue1}" />
    </tr:showDetailItem>
    <tr:showDetailItem text="Second tab">
      <tr:inputText label="Value 2" value="#{myBean.someValue2}" required="true" />
      <tr:commandButton text="Save Value 2" actionListener="#{myBean.saveValue2}" />
   </tr:showDetailItem>
  </tr:panelTabbed>
</tr:form>

首先它运作良好,但引导我到最后的问题:

我在每种表格中都有一些验证。当用户尝试切换到第二个选项卡而第一个选项卡包含验证错误时,不允许他或她这样做。我想避免这种行为,但我还想在用户点击保存按钮时验证当前标签的内容。

有任何建议如何解决这个问题?

提前致谢

1 个答案:

答案 0 :(得分:0)

Trinidad有一个tr:subform标签可能就是你需要的,尝试在每个面板中使用一个通用的tr:form标签和一个小的tr:子表单(我希望你想分别验证表单)。