在两个面板组上使用 p:ajax 时,Omnifaces validateOrder BigDecimal 无法转换为 String
Omnifaces validateOrder BigDecimal cannot be cast to String when using p:ajax on two panel groups
EDIT 如何将 o:validateOrder 和 p:ajax 与不在同一面板组中的两个输入一起使用?
原版
我得到 java.math.BigDecimal cannot be cast to java.lang.String using Omnifaces o:validateOrder,但仅适用于我对两个面板组和 p:ajax 处理两个输入。我仅将两个单独的面板组用于 GUI 布局。在 o:validateOrder 期间调试,comparableValues 数组有一个值为 BigDecimal,另一个为字符串。
但是当我 ajax 处理一个包装两个输入的单个面板组时(比如 p:ajax process="bothLengthsPanelGroup")
事情有效并且 comparableValues 数组具有两个值作为 BigDecimals。但是 GUI 没有我想要的布局。如何保持我的格式但让 p:ajax 传入 BigDecimals?
<h:panelGrid columns="2">
<h:panelGroup id="nlength">
<p:outputLabel value="Bolt Length" />
<h:panelGrid columns="3">
<h:outputLabel value="nominal:" />
<p:inputText size="1" id="bolt_length" value="#{cc.attrs.bolt.nominal_fastener_length}">
<p:ajax process="tlength nlength" update="nlength tlength boltFeedback" />
</p:inputText>
</h:panelGrid>
<o:validateOrder type="gt" components="bolt_length thread_length" message="Nominal Thread Length must not exceed Nominal Bolt Length" disabled="#{empty cc.attrs.bolt.nominal_fastener_length and empty cc.attrs.bolt.nominal_thread_length}" />
</h:panelGroup>
<h:panelGroup id="tlength">
<p:outputLabel value="Thread Length" />
<h:panelGrid columns="3">
<h:outputLabel value="nominal:" />
<p:inputText size="1" id="thread_length" value="#{cc.attrs.bolt.nominal_thread_length}">
<p:ajax process="tlength nlength" update="tlength nlength boltFeedback" />
</p:inputText>
</h:panelGrid>
<o:validateOrder type="gt" components="bolt_length thread_length" message="Nominal Thread Length must not exceed Nominal Bolt Length" disabled="#{empty cc.attrs.bolt.nominal_fastener_length and empty cc.attrs.bolt.nominal_thread_length}" />
</h:panelGroup>
</h:panelGrid>
试试这个...我只使用一个 o:validate 命令并更改流程="pnlLengths" 以处理整个 DIV 而不会影响您的面板网格布局。
<h:panelGrid columns="2" id="pnlLengths">
<h:panelGroup id="nlength">
<p:outputLabel value="Bolt Length" />
<h:panelGrid columns="3">
<h:outputLabel value="nominal:" />
<p:inputText size="1" id="bolt_length" value="#{cc.attrs.bolt.nominal_fastener_length}">
<p:ajax process="pnlLengths" update="nlength tlength boltFeedback" />
</p:inputText>
</h:panelGrid>
</h:panelGroup>
<h:panelGroup id="tlength">
<p:outputLabel value="Thread Length" />
<h:panelGrid columns="3">
<h:outputLabel value="nominal:" />
<p:inputText size="1" id="thread_length" value="#{cc.attrs.bolt.nominal_thread_length}">
<p:ajax process="pnlLengths" update="tlength nlength boltFeedback" />
</p:inputText>
</h:panelGrid>
</h:panelGroup>
<o:validateOrder type="gt" components="bolt_length thread_length" message="Nominal Thread Length must not exceed Nominal Bolt Length" disabled="#{empty cc.attrs.bolt.nominal_fastener_length and empty cc.attrs.bolt.nominal_thread_length}" />
</h:panelGrid>
EDIT 如何将 o:validateOrder 和 p:ajax 与不在同一面板组中的两个输入一起使用?
原版
我得到 java.math.BigDecimal cannot be cast to java.lang.String using Omnifaces o:validateOrder,但仅适用于我对两个面板组和 p:ajax 处理两个输入。我仅将两个单独的面板组用于 GUI 布局。在 o:validateOrder 期间调试,comparableValues 数组有一个值为 BigDecimal,另一个为字符串。
但是当我 ajax 处理一个包装两个输入的单个面板组时(比如 p:ajax process="bothLengthsPanelGroup")
事情有效并且 comparableValues 数组具有两个值作为 BigDecimals。但是 GUI 没有我想要的布局。如何保持我的格式但让 p:ajax 传入 BigDecimals?
<h:panelGrid columns="2">
<h:panelGroup id="nlength">
<p:outputLabel value="Bolt Length" />
<h:panelGrid columns="3">
<h:outputLabel value="nominal:" />
<p:inputText size="1" id="bolt_length" value="#{cc.attrs.bolt.nominal_fastener_length}">
<p:ajax process="tlength nlength" update="nlength tlength boltFeedback" />
</p:inputText>
</h:panelGrid>
<o:validateOrder type="gt" components="bolt_length thread_length" message="Nominal Thread Length must not exceed Nominal Bolt Length" disabled="#{empty cc.attrs.bolt.nominal_fastener_length and empty cc.attrs.bolt.nominal_thread_length}" />
</h:panelGroup>
<h:panelGroup id="tlength">
<p:outputLabel value="Thread Length" />
<h:panelGrid columns="3">
<h:outputLabel value="nominal:" />
<p:inputText size="1" id="thread_length" value="#{cc.attrs.bolt.nominal_thread_length}">
<p:ajax process="tlength nlength" update="tlength nlength boltFeedback" />
</p:inputText>
</h:panelGrid>
<o:validateOrder type="gt" components="bolt_length thread_length" message="Nominal Thread Length must not exceed Nominal Bolt Length" disabled="#{empty cc.attrs.bolt.nominal_fastener_length and empty cc.attrs.bolt.nominal_thread_length}" />
</h:panelGroup>
</h:panelGrid>
试试这个...我只使用一个 o:validate 命令并更改流程="pnlLengths" 以处理整个 DIV 而不会影响您的面板网格布局。
<h:panelGrid columns="2" id="pnlLengths">
<h:panelGroup id="nlength">
<p:outputLabel value="Bolt Length" />
<h:panelGrid columns="3">
<h:outputLabel value="nominal:" />
<p:inputText size="1" id="bolt_length" value="#{cc.attrs.bolt.nominal_fastener_length}">
<p:ajax process="pnlLengths" update="nlength tlength boltFeedback" />
</p:inputText>
</h:panelGrid>
</h:panelGroup>
<h:panelGroup id="tlength">
<p:outputLabel value="Thread Length" />
<h:panelGrid columns="3">
<h:outputLabel value="nominal:" />
<p:inputText size="1" id="thread_length" value="#{cc.attrs.bolt.nominal_thread_length}">
<p:ajax process="pnlLengths" update="tlength nlength boltFeedback" />
</p:inputText>
</h:panelGrid>
</h:panelGroup>
<o:validateOrder type="gt" components="bolt_length thread_length" message="Nominal Thread Length must not exceed Nominal Bolt Length" disabled="#{empty cc.attrs.bolt.nominal_fastener_length and empty cc.attrs.bolt.nominal_thread_length}" />
</h:panelGrid>