Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf commandButton/commandLink/ajax操作/侦听器方法未调用或输入值未设置/更新_Jsf_Jsf 2_Action_Commandbutton_Commandlink - Fatal编程技术网

Jsf commandButton/commandLink/ajax操作/侦听器方法未调用或输入值未设置/更新

Jsf commandButton/commandLink/ajax操作/侦听器方法未调用或输入值未设置/更新,jsf,jsf-2,action,commandbutton,commandlink,Jsf,Jsf 2,Action,Commandbutton,Commandlink,有时,在使用、或时,与标记关联的操作、操作监听器或监听器方法不会被调用。或者,bean属性不会用提交的UIInput值更新 可能的原因和解决方案是什么?引言 每当UICommand组件(,等)未能调用关联的操作方法,或UIInput组件(,等)未能处理提交的值和/或更新模型值时,而且,在服务器日志中没有看到任何Google异常和/或警告,也不是在按照配置ajax异常处理程序时,也不是在web.xml中设置以下上下文参数时 <context-param> <param-n

有时,在使用
时,与标记关联的
操作
操作监听器
监听器
方法不会被调用。或者,bean属性不会用提交的
UIInput
值更新

可能的原因和解决方案是什么?

引言 每当
UICommand
组件(
等)未能调用关联的操作方法,或
UIInput
组件(
等)未能处理提交的值和/或更新模型值时,而且,在服务器日志中没有看到任何Google异常和/或警告,也不是在按照配置ajax异常处理程序时,也不是在
web.xml
中设置以下上下文参数时

<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>

javax.faces.PROJECT_阶段
发展
在浏览器的JavaScript控制台中,您也没有看到任何Googleable错误和/或警告(在Chrome/Firefox23+/IE9+中按F12打开web developer工具集,然后打开console选项卡),然后处理下面列出的可能原因

可能原因
  • UICommand
    UIInput
    组件必须放在
    UIForm
    组件中,例如
    (因此不是普通的HTML
    ),否则无法向服务器发送任何内容
    UICommand
    组件也不能具有
    type=“button”
    属性,否则它将是一个死按钮,仅对JavaScript
    onclick
    有用。另见和

  • 不能将多个
    UIForm
    组件嵌套在一起。这在HTML中是非法的。未指定浏览器行为。小心包含文件!您可以并行使用
    UIForm
    组件,但它们在提交期间不会相互处理。你也应该注意“上帝形态”反模式;确保您不会无意中处理/验证同一格式的所有其他(不可见)输入(例如,有一个隐藏对话框,其中包含同一格式的所需输入)。另见

  • 不应出现
    UIInput
    值验证/转换错误。您可以使用
    显示任何特定于输入的
    组件未显示的任何消息。不要忘记在
    中包含
    id
    ,如果有的话,这样它也会在ajax请求中更新。另见

  • 如果
    UICommand
    UIInput
    组件放置在迭代组件(如
    等)中,则需要确保在表单提交请求的应用请求值阶段保留与迭代组件完全相同的
    值。JSF将在上面重复查找单击的链接/按钮和提交的输入值。将bean放入视图范围和/或确保在bean的
    @PostConstruct
    中加载数据模型(因此不是在getter方法中!)应该可以解决这个问题。另见

  • 如果动态源(如
    )包含
    UICommand
    UIInput
    组件,则需要确保在表单提交请求的视图生成期间保留完全相同的
    {bean.include}
    值。JSF将在构建组件树期间重新执行它。将bean放入视图范围和/或确保在bean的
    @PostConstruct
    中加载数据模型(因此不是在getter方法中!)应该可以解决这个问题。另见

  • 在表单提交请求的应用请求值阶段,组件及其所有父级的
    呈现的
    属性和任何父级的
    测试
    属性不应评估为
    。JSF将重新检查它,作为防止篡改/黑客请求的一部分。将负责该条件的变量存储在
    @ViewScoped
    bean中,或者确保在
    @RequestScoped
    bean的
    @PostConstruct
    中正确地预初始化该条件,应该可以解决该问题。这同样适用于组件的
    disabled
    readonly
    属性,在应用请求值阶段,这些属性不应计算为
    true
    。另见,和

  • UICommand
    组件的
    onclick
    属性和
    UIForm
    组件的
    onsubmit
    属性不应返回
    false
    或导致JavaScript错误。在出现
    的情况下,浏览器的JS控制台中也应该没有可见的JS错误。通常,谷歌搜索准确的错误信息会给你答案。另见

  • 如果您是通过JSF 2.x
    或例如PrimeFaces
    使用Ajax,请确保主模板中有一个
    ,而不是
    。否则JSF将无法自动包含包含Ajax函数的必要JavaScript文件。这将导致在浏览器的JS控制台中出现JavaScript错误,如“mojarra未定义”或“PrimeFaces未定义”。另见

  • 如果您使用的是Ajax,并且提交的值最终为
    null
    ,那么请确保
    UIInput
    UICommand
    感兴趣的组件包含在
    中,或者例如
    ,否则它们将不会被执行/处理。另见和

  • 如果提交的值仍然是
    null
    ,并且您正在使用CDI管理bean,那么请确保您从正确的包导入范围注释,否则CDI将默认为
    @Dependent
    ,从而有效地重新创建
    <h:commandButton class="btn btn-danger" value = "Remove" action="#{deleteEmployeeBean.delete}"></h:commandButton>
    
    <h:form>
         <h:commandButton class="btn btn-danger" value = "Remove" action="#{deleteEmployeeBean.delete}"></h:commandButton>
    </h:form>
    
    <ui:composition>  
      <h:form id="form1">
        <p:dialog id="dialog1">
          <p:commandButton value="Save" action="#{bean.method1}" /> <!--Working-->
        </p:dialog>
      </h:form>
    
      <h:form id="form2">
        <p:dialog id="dialog2">
          <p:commandButton value="Save" action="#{bean.method2}" /> <!--Not Working-->
        </p:dialog>
      </h:form>
    </ui:composition>
    
    <ui:composition>  
      <h:form id="form1">
        <p:dialog id="dialog1">
          <p:commandButton value="Save" action="#{bean.method1}" />   <!-- Working  -->
        </p:dialog>
    
        <p:dialog id="dialog2">
          <p:commandButton value="Save" action="#{bean.method2}" />   <!--Working  -->
        </p:dialog>
      </h:form>
      <h:form id="form2">
        <!-- ..........  -->
      </h:form>
    </ui:composition>
    
    <p:commandButton id="b1" value="Save" process="userGroupSetupForm"
                        actionListener="#{userGroupSetupController.saveData()}" 
                        update="growl userGroupList userGroupSetupForm" />