【问题标题】:pe:inputNumber value resetting to initial value inside p:tabpe:inputNumber 值重置为 p:tab 内的初始值
【发布时间】:2015-12-30 04:20:03
【问题描述】:

我的屏幕上有一个<p:tabView>,其中一个选项卡(<p:tab>) 有几个<pe:inputNumber>,其minValue 属性设置为-9999999999.99。当我输入任何正值或负值并在选项卡之间切换时,输入值会重置为其初始值,而对于未设置 minValue 的输入,它会在选项卡之间切换后保留输入的值。

我是否缺少要设置的属性?或者是否有相同的解决方法?

编辑:我正在使用 primefaces 5.3 和 primefaces-extensions 4.0.0。我的标签代码如下所示:

<p:tabView id="sections" style="width:inherit;background-color: #F0F0F0;">
        <p:ajax event="tabChange" listener="#{tabbedViewManagedBean.onTabChange}" />
        <p:ajax event="tabClose" listener="#{tabbedViewManagedBean.onTabClose}" />

        <p:tab title="First Tab" id="firsttab">
            <ui:include src="firsttab.xhtml" />
        </p:tab>

        <p:tab title="Second Tab" id="secondtab">
            <ui:include src="secondtab.xhtml" />
        </p:tab>
 </p:tabView>

选项卡式视图托管 bean 在选项卡之间切换时获取该选项卡的数据。每个选项卡都有自己的会话范围托管 bean。

secondtab.xhtml 的代码是:

    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:c="http://java.sun.com/jstl/core"
        xmlns:p="http://primefaces.org/ui"
        xmlns:pe="http://primefaces.org/ui/extensions">

      <h:outputText value="Net Loss :" />
        <pe:inputNumber value="#{secondTabMB.netLoss}" 
           symbol="$ " minValue="-99999999999999.99" />

    </ui:composition>

Here's how my screen looks

【问题讨论】:

  • 提及 PrimeFaces 和 PrimeFaces Extensions 的版本。

标签: jsf primefaces negative-number primefaces-extensions


【解决方案1】:

我尝试使用此代码重现您的问题,但下面的代码按预期工作。我可以在不丢失值的情况下切换标签:

@ManagedBean
@ViewScoped
public class Test {

    private Double input1;
    private Double input2;

//Getters & Setters
}

html

<h:form>
    <p:tabView>
        <p:tab title="Input1">
            <h:outputText value="Net Loss :" />
            <div class="form-element-wrapper">
                <pe:inputNumber value="#{test.input1}" symbol="$ " >
                    <p:ajax process="@this"/>
                </pe:inputNumber>
            </div>

        </p:tab>
        <p:tab title="Input2">
            <h:outputText value="Net Loss :" />
            <div class="form-element-wrapper">
                <pe:inputNumber value="#{test.input2}" symbol="$ " minValue="-99999999999999.99" >
                    <p:ajax process="@this"/>
                </pe:inputNumber>
            </div>
        </p:tab>
    </p:tabView>
</h:form>

我添加了 process="@this" 只是为了在失去焦点时进行 ajax 提交。

你能从你的 ajax 请求中提供以下代码吗?:

<p:ajax event="tabChange" listener="#{tabbedViewManagedBean.onTabChange}" />

【讨论】:

  • 我已经对我的代码进行了类似于您提到的更改,但 '' 。但我认为这是 Prime faces 必须考虑的事情,因为我们正在明确更新组件,这不是一个好的做法。由于我必须在切换时使用 Ajax 更新选项卡中的大多数组件,因此我需要在调用屏幕时预加载选项卡中的所有数据,或者按照我的说明使用 p:ajax。
  • 你能提供&lt;p:ajax event="tabChange" listener="#{tabbedViewManagedBean.onTabChange}" /&gt;的监听器和范围tabbedViewManagedBean正在运行吗?上面的代码即使没有&lt;p:ajax process="@this"/&gt; 也能工作,所以&lt;p:ajax event="change" update="@this" /&gt; 并不能解决您的问题,它只是涵盖了您的视图设计不佳。
  • 第二个想法:你为什么选择为 sessionscope 中的每个选项卡设置托管 bean?请阅读本文以更好地理解范围 - SO - How to choose the right bean scope?
  • 我们现在已经完成了这个项目,所以我无法再访问该代码了。这个问题与范围无关,因为我什至尝试更改范围。关于 Ajax 更新对我没有帮助是错误的,因为它确实有效,而且我已经多次测试过。
  • 我并没有说它可能对你的问题没有帮助,但它绝对不会解决你问题的根源......没关系,只是想帮助......关闭这个问题请
【解决方案2】:

这可能会有所帮助:

<pe:inputNumber value="#{secondTabMB.netLoss}" 
       symbol="$ " minValue="-99999999999999.99">
    <p:ajax event="blur" global="false" />
</pe:inputNumber>

【讨论】:

  • 三个字母……为什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-18
  • 2021-08-08
  • 2021-10-14
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多