为什么我的Controller setter在我的PrimeFaces项目中不起作用?

时间:2011-05-02 19:23:36

标签: java controller jsf-2 primefaces managed-bean

我正在使用Showcase源代码作为支持,使用PrimeFaces 2.2.1创建一些页面。

我创建的页面与Spinner Showcase完全相同,结构相同:

<h:form prependId="false">
    <p:panel header="Spinners">
        <h:panelGrid id="grid" columns="2" cellpadding="5">
            <h:outputLabel for="spinnerBasic" value="Basic Spinner: " />
            <p:spinner id="spinnerBasic" value="#{spinnerController.number1}" />

            <h:outputLabel for="spinnerStep" value="Step Factor: " />
            <p:spinner id="spinnerStep" value="#{spinnerController.number2}" stepFactor="0.25" />
        </h:panelGrid>
    </p:panel>

    <p:commandButton value="Submit" update="display" oncomplete="dialog.show()" />

    <p:dialog header="Values" widgetVar="dialog">
        <h:panelGrid id="display" columns="2" cellpadding="5">
            <h:outputText value="Value 1: " />
            <h:outputText value="#{spinnerController.number1}" />

            <h:outputText value="Value 2: " />
            <h:outputText value="#{spinnerController.number2}" />
        </h:panelGrid>
    </p:dialog>
</h:form>

然后我创建了我的SpinnerController,就像Showcase中的那个一样,只将包重命名为org.myproject.view(这是我正在使用的包名)。

并将其添加到我的faces-config.xml

<managed-bean>
    <managed-bean-name>spinnerController</managed-bean-name>
    <managed-bean-class>org.myproject.view.SpinnerController</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

但是当我点击提交按钮时,对话框会显示0的所有值。

使用断点,我可以看到我的getNumber1getNumber2正在运行,但setNumber1setNumber2从未运行。我可以尝试使用微调器更改值或直接输入输入字段,但是setter也不会运行。

有没有人知道我在Showcase项目中存在的项目中缺少什么?

1 个答案:

答案 0 :(得分:1)

是的,PrimeFaces有时真的会烧伤。

好吧,你帮我解决了PrimeFaces里面的jQuery问题。现在我想我可以帮助你解决你的PrimeFaces问题:

  • 首先,您不需要prependId="false"。生成时,div可以是“j_idt10:display”。您只需要在命令按钮上放置“display”,JSF就会注意添加第一部分(j_idt10)。
  • 其次,避免不必要的ID。任何其他控件都不会调用您的h:panelGrid id="grid",因此它不需要该ID。

这里我刚刚完成了这些步骤,回调没问题。