我对 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>
这首先工作正常,但导致我的最后一个问题:
我对每种形式都有一些验证。当用户尝试切换到第二个选项卡而第一个选项卡包含验证错误时,不允许他或她这样做。我想避免这种行为,但我也想在用户单击保存按钮时验证当前选项卡的内容。
任何建议如何解决这个问题?
提前致谢