更改组件渲染顺序

时间:2014-09-07 17:46:47

标签: jsf jsf-2 primefaces

我创建了一个用于构建表单的页面,并且我使用PrimeFaces组件的信息中心来存储和订购表单的字段。问题是:当我尝试添加一个新的表单字段时,通过向Bean发送两个输入值,在set方法输入之前调用仪表板的get方法,因此我无法将输入值添加到仪表板

Form.xhtml:

<h:form id="dashboardForm">
  <h:panelGrid columns="4" cellpadding="5">
    <p:outputLabel for="formName" value="Form Name"></p:outputLabel>
    <p:inputText id="formName" placeholder="Exemple Form"></p:inputText>
  </h:panelGrid>        
  <hr></hr>
  <p:layout>
    <p:layoutUnit position="west" minSize="150">
      <p:panel header="Add Field">
        <h:panelGrid columns="2" cellpadding="5" id="newField">
          <p:outputLabel for="newFieldName" value="Question"></p:outputLabel>
          <p:inputTextarea  id="newFieldName" value="#{monitoringFormDashboard.newFieldName}"></p:inputTextarea>

          <p:outputLabel for="newFieldType" value="Type"></p:outputLabel>
          <p:selectOneMenu immediate="true" id="newFieldType" value="#{monitoringFormDashboard.newFieldType}">
          <f:selectItem itemLabel="Text" itemValue="0"></f:selectItem>
          <f:selectItem itemLabel="Dropdown" itemValue="1"></f:selectItem>
          <f:selectItem itemLabel="Boolean" itemValue="2"></f:selectItem>
          </p:selectOneMenu>

        </h:panelGrid>
        <p:commandButton id="addNewField" value="Add" actionListener="#{monitoringFormDashboard.addField}" update="dashboard" image="ui-icon ui-icon-carat-1-e" />
      </p:panel>
    </p:layoutUnit>
    <p:layoutUnit position="center">
      <p:dashboard id="dashboard" binding="#{monitoringFormDashboard.dashboard}">        
      </p:dashboard>
    </p:layoutUnit>
  </p:layout>        
</h:form>

当我按下Add commandButton时,bean上的方法执行顺序是:

  1. getDashboard
  2. setDashboard
  3. getNewFieldName
  4. getNewFieldType
  5. setNewFieldName
  6. setNewFieldType
  7. 激活addField
  8. 所以这正是我需要的逆序。我首先需要newFieldName和newFieldName,然后再调用addField和至少getDashboard ......

    如果需要,这是bean类:http://pastebin.com/fcCnAYNZ

    我错过了什么?

1 个答案:

答案 0 :(得分:0)

我发现了问题。它与绑定有关,正如我从另一个伟大的@BalusC回答中读到的那样:

How biding attribute in jsf works

在删除绑定并使用其他方法后,它就像一个魅力。