java - JSF 重置按钮未重置几列

标签 java jsf jsf-2

我在 JSF 页面中有以下内容,当我按下重置按钮时,除了 employeenumber(empnumber)phone(phoneno) 之外的所有值都会重置,甚至 autoComplete(empname) 被重置。这可能是什么原因?

    <p:panelGrid   columns="6"> 

    <h:outputLabel value="Employee Name"  />
    <p:autoComplete value="#{myMB.employee}"  id="empname"      
    completeMethod="#{myMB.complete}" converter="myConverter"
    var="p" itemLabel="#{p.employeeName}" itemValue="#{p}"               
    forceSelection="true" >                           
    <p:ajax event="itemSelect" listener="#{myMB.handleSelect}" 
    update ="empnumber phoneno" /> 
    <p:column>#{p.employeeName} - #{p.employeeNumber}</p:column>
    </p:autoComplete>   

   <p:message id="badgeMessage" for="empname" />                      

   <h:outputLabel  value="Employee Number"  />
   <p:inputText id="empnumber" value="#{myMB.employeeDetail.employeeNumber}" >
   </p:inputText>
   <p:message id="empnumMessage" for="empnumber" />

   <h:outputLabel value="Phone #" for="phoneno" />
   <p:inputText id="phoneno" value="#{myMB.employeeDetail.phoneNo}">
   </p:inputText>
   <p:message id="phoneMessage" for="phoneno" />

   </p:panelGrid>
   <p:separator />
  <p:panelGrid >
  <h:outputLabel value="Department" for="department" /> 
  <h:selectOneMenu id="department" value="#{myMB.department}"
  converter="departmentConverter"> 
  <f:selectItems value="#{myMB.departmentItems}" var="dept"
  itemLabel="#{dept.departmentName}" itemValue="#{dept.departmentCode}"/>
  <p:ajax listener="#{myMB.loadDepartments}" />
  </h:selectOneMenu>
 <p:message id="categoryMessage" for=  "department" />


 <p:commandButton type="reset" value="Cancel" icon="ui-icon-close"                     
 onclick="myDialog.hide()" />  

最佳答案

如果您实际上正在使用 Primefaces,那么使用其组件 <p:resetInput> 是有意义的。这是专门设计用于在验证失败时处理数据重置的。从官方文档可以看出:

Input components keep their local values at state when validation fails. ResetInput is used to clear the cached values from state so that components retrieve their values from the backing bean model instead.

如果验证失败,组件的工作方式如下,组件的值在 target 中指定。 <p:resetInput> 的属性,当附加标签时,将重新填充初始值。 <p:resetInput>可以附加到操作源组件,例如 <p:commandButton> .

为了简化其使用,您可以选择将所有要重置的组件分组到一个容器中,例如 <p:panel id="panel"> ,正如您从展示示例中看到的那样。

从这个角度来看,您的 View 可以重组为:

<h:form>
    <p:panel id="panel">
        <p:panelGrid   columns="6"> 
            <h:outputLabel value="Employee Name"  />
            <p:autoComplete value="#{myMB.employee}"  id="empname"      
                            completeMethod="#{myMB.complete}" converter="myConverter"
                            var="p" itemLabel="#{p.employeeName}" itemValue="#{p}"               
                            forceSelection="true" >                           
                <p:ajax event="itemSelect" listener="#{myMB.handleSelect}" 
                        update ="empnumber phoneno" /> 
                <p:column>#{p.employeeName} - #{p.employeeNumber}</p:column>
            </p:autoComplete>   
            <p:message id="badgeMessage" for="empname" />                      
            <h:outputLabel  value="Employee Number"  />
            <p:inputText id="empnumber" value="#{myMB.employeeDetail.employeeNumber}" >
            </p:inputText>
            <p:message id="empnumMessage" for="empnumber" />
            <h:outputLabel value="Phone #" for="phoneno" />
            <p:inputText id="phoneno" value="#{myMB.employeeDetail.phoneNo}">
            </p:inputText>
            <p:message id="phoneMessage" for="phoneno" />
        </p:panelGrid>
        <p:separator />
        <h:outputLabel value="Department" for="department" /> 
        <h:selectOneMenu id="department" value="#{myMB.department}"
                         converter="departmentConverter"> 
            <f:selectItems value="#{myMB.departmentItems}" var="dept"
                           itemLabel="#{dept.departmentName}" itemValue="#{dept.departmentCode}"/>
            <p:ajax listener="#{myMB.loadDepartments}" />
        </h:selectOneMenu>
        <p:message id="categoryMessage" for=  "department" />
    </p:panel>

    <p:commandButton value="Reset input values" update="panel" process="@this" onclick="myDialog.hide()" icon="ui-icon-close">
        <p:resetInput target="panel"/>
    </p:commandButton>
</h:form>

关于java - JSF 重置按钮未重置几列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15356520/

相关文章:

java - f :ajax listener not fired. 意外行为

java - 何时使用 Java Bean 以及何时使用 Enterprise Java Bean

java - 如何要求我的 JSF 实现通过 Flash 重定向到新 View ?

java - Android Studio - 应用程序中使用的库项目如何遵循 app-release.apk

jquery - 将 jQuery 与 JSF 自动生成的 id 结合使用(问题为 ":")

java - 在系统环境变量中定义Java Path时是否需要JAVA_HOME变量?

java - 如何创建实时应用程序

forms - 如何创建 h :selectOneRadio with options of a java list (JSF)?

java - 编译为 .war 时,Cucumber 在类路径上找不到功能文件

java - 霍夫曼树的遍历辅助方法