- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有时,在使用 <h:commandLink>
时, <h:commandButton>
或 <f:ajax>
, action
, actionListener
或 listener
与标签关联的方法根本没有被调用。或者,bean 属性未通过提交的 UIInput
更新值。
造成这种情况的可能原因和解决方法是什么?
最佳答案
介绍
每当 UICommand
组件( <h:commandXxx>
、 <p:commandXxx>
等)无法调用关联的操作方法,或 UIInput
组件( <h:inputXxx>
、 <p:inputXxxx>
等)无法处理提交的值和/或更新模型值,并且您在服务器日志中没有看到任何可搜索的异常和/或警告,在配置根据 Exception handling in JSF ajax requests 的 ajax 异常处理程序,也不当您在 web.xml
中设置以下上下文参数时,
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
并且您也没有在浏览器的 JavaScript 控制台中看到任何可搜索错误和/或警告(在 Chrome/Firefox23+/IE9+ 中按 F12 打开 Web 开发人员工具集,然后打开控制台选项卡),然后解决以下可能的原因列表。
UICommand
和 UIInput
组件必须放置在 UIForm
内组件,例如<h:form>
(因此不是纯 HTML <form>
),否则无法将任何内容发送到服务器。 UICommand
组件也不能有 type="button"
属性,否则它将是一个仅对 JavaScript 有用的死按钮 onclick
.另见 How to send form input values and invoke a method in JSF bean和 <h:commandButton> does not initiate a postback .UIForm
组件彼此。这在 HTML 中是非法的。浏览器行为未指定。小心包含文件!您可以使用 UIForm
组件并行,但它们在提交期间不会相互处理。你还应该注意“God Form”反模式;确保您不会无意中以完全相同的形式处理/验证所有其他(不可见的)输入(例如,以完全相同的形式具有包含所需输入的隐藏对话框)。另见 How to use <h:form> in JSF page? Single form? Multiple forms? Nested forms? .UIInput
值验证/转换错误应该发生。您可以使用 <h:messages>
显示任何特定于输入的消息未显示的任何消息 <h:message>
组件。不要忘记包含 id
的 <h:messages>
在 <f:ajax render>
,如果有的话,这样它也会在 ajax 请求上更新。另见 h:messages does not display messages when p:commandButton is pressed .UICommand
或 UIInput
组件被放置在一个迭代组件中,比如 <h:dataTable>
, <ui:repeat>
等,那么你需要确保完全一样value
在表单提交请求的应用请求值阶段保留了迭代组件。 JSF 将重复它以查找单击的链接/按钮和提交的输入值。将 bean 放入 View 范围和/或确保在 @PostConstruct
中加载数据模型的 bean(因此不在 getter 方法中!)应该修复它。另见 How and when should I load the model from database for h:dataTable .UICommand
或 UIInput
组件包含在动态源中,例如 <ui:include src="#{bean.include}">
,那么你需要确保完全一样#{bean.include}
在表单提交请求的 View 构建期间保留值。 JSF 将在构建组件树期间重新执行它。将 bean 放入 View 范围和/或确保在 @PostConstruct
中加载数据模型的 bean(因此不在 getter 方法中!)应该修复它。另见 How to ajax-refresh dynamic include content by navigation menu? (JSF SPA) .rendered
组件及其所有父级的属性以及 test
任何父级的属性 <c:if>
/<c:when>
不应评估为 false
在表单提交请求的应用请求值阶段。 JSF 将重新检查它,作为防止篡改/黑客请求的保护措施的一部分。将负责条件的变量存储在 @ViewScoped
中bean 或确保您正确地预初始化了 @PostConstruct
中的条件的 @RequestScoped
bean 应该修复它。这同样适用于 disabled
和 readonly
组件的属性,不应计算为 true
在应用请求值阶段。另见 JSF CommandButton action not invoked , Form submit in conditionally rendered component is not processed , h:commandButton is not working once I wrap it in a <h:panelGroup rendered>和 Force JSF to process, validate and update readonly/disabled input components anywayonclick
UICommand
的属性组件和 onsubmit
UIForm
的属性组件不应返回 false
或导致 JavaScript 错误。在 <h:commandLink>
的情况下应该有或 <f:ajax>
在浏览器的 JS 控制台中也没有可见的 JS 错误。通常谷歌搜索确切的错误信息已经会给你答案。另见 Manually adding / loading jQuery with PrimeFaces results in Uncaught TypeErrors .<f:ajax>
或例如PrimeFaces <p:commandXxx>
,请确保您拥有 <h:head>
在主模板中而不是 <head>
.否则 JSF 将无法自动包含包含 Ajax 函数的必要 JavaScript 文件。这将导致在浏览器的 JS 控制台中出现类似“mojarra 未定义”或“PrimeFaces 未定义”之类的 JavaScript 错误。另见 h:commandLink actionlistener is not invoked when used with f:ajax and ui:repeat .null
,然后确保 UIInput
和 UICommand
<f:ajax execute>
涵盖了感兴趣的组件或例如<p:commandXxx process>
,否则它们将不会被执行/处理。另见 Submitted form values not updated in model when adding <f:ajax> to <h:commandButton>和 Understanding PrimeFaces process/update and JSF f:ajax execute/render attributes .null
,并且您使用 CDI 来管理 bean,然后确保从正确的包中导入范围注释,否则 CDI 将默认为 @Dependent
它在每次对 EL 表达式的评估时有效地重新创建 bean。另见 @SessionScoped bean looses scope and gets recreated all the time, fields become null和 What is the default Managed Bean Scope in a JSF 2 application?<h:form>
的父级与 UICommand
按钮是由来自同一页面中另一个表单的 ajax 请求预先呈现/更新的,那么在 JSF 2.2 或更早版本中,第一个操作将始终失败。第二个和随后的操作将起作用。这是由 View 状态处理中的错误引起的,报告为 JSF spec issue 790目前已在 JSF 2.3 中修复。对于较旧的 JSF 版本,您需要明确指定 <h:form>
的 ID。在 render
的<f:ajax>
.另见 h:commandButton/h:commandLink does not work on first click, works only on second click .<h:form>
有 enctype="multipart/form-data"
设置以支持文件上传,那么您需要确保您使用的至少是 JSF 2.2,或者负责解析 multipart/form-data 请求的 servlet 过滤器已正确配置,否则 FacesServlet
最终将完全没有请求参数,因此无法应用请求值。如何配置这样的过滤器取决于所使用的文件上传组件。战斧用<t:inputFileUpload>
, 检查 this answer和 PrimeFaces <p:fileUpload>
, 检查 this answer .或者,如果您实际上根本没有上传文件,则完全删除该属性。ActionEvent
actionListener
的论据是 javax.faces.event.ActionEvent
因此不是 java.awt.event.ActionEvent
,这是大多数 IDE 建议的第一个自动完成选项。如果你使用 actionListener="#{bean.method}"
,没有参数也是错误的。 .如果您不想在方法中使用参数,请使用 actionListener="#{bean.method()}"
.或者你可能真的想使用 action
而不是 actionListener
.另见 Differences between action and actionListener .PhaseListener
或任何 EventListener
请求-响应链中的 JSF 生命周期已更改为跳过调用操作阶段,例如调用 FacesContext#renderResponse()
或 FacesContext#responseComplete()
.Filter
或 Servlet
在同一请求-响应链中阻止了对 FacesServlet
的请求不知何故。例如,登录/安全过滤器,如 Spring Security。特别是在默认情况下根本没有 UI 反馈的 ajax 请求中。另见 Spring Security 4 and PrimeFaces 5 AJAX request handling .<p:dialog>
或 <p:overlayPanel>
,然后确保他们有自己的 <h:form>
.因为,这些组件默认由 JavaScript 重新定位到 HTML 的末尾 <body>
.所以,如果他们原本坐在 <form>
里面,那么他们现在就不会再坐在 <form>
.另见 p:commandbutton action doesn't work inside p:dialogrich:calendar
时,RichFaces 有一个“conversion error”带有 defaultLabel
的 UI 元素属性(或者,在某些情况下,是 rich:placeholder
子元素)。当没有为日历日期设置值时,此错误会阻止调用 bean 方法。可以通过从一个简单的工作示例开始并备份页面直到发现错误来完成跟踪框架错误。<f:ajax>
的情况。启用按钮而没有
<h:head>
已声明(如上文第 7 点所述)。
<h:inputText>
和一个
<h:commandButton>
与
<f:ajax execute="@form" render="@form">
.
UICommand
的情况下组件,即
UICommand#queueEvent()
如果是
UIInput
组件,即
UIInput#validate()
.只需逐步执行代码并检查流程和变量是否符合预期。下面的屏幕截图是来自 Eclipse 调试器的示例。
关于jsf - commandButton/commandLink/ajax action/listener 方法未调用或输入值未设置/更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2118656/
今天我有一个非常简单的任务需要帮助。首先让我解释一下我的环境。我们正在使用 Java/Hibernate/SEAM/Facelets/JSF/RichFaces 和 A4J 设置..我对此了解不多。
f:param与 h:link 配合使用效果很好,但不是 p:commandLink或 h:commandLink . 例如,我有两页 test_first.xhtml和 test_second.xh
我最近开始做一些JSF工作-在此之前,我一直使用PHP或Python进行Web开发。 当我发现使用h:commandLink标记时,JSF使用HTTP POST进行导航时,我感到有些惊讶。 我一直在使
环境:Tomcat 6、jsf 2.0、prime faces 2.2.1、chrome 浏览器 我想单击左侧伸展树(Splay Tree)中的“查看详细信息”链接并显示产品的详细信息。但下面的代码不
我正在尝试在我的应用程序 (Seam/RichFaces) 中显示购物车,并包含“从购物车中删除”旁边的每个项目以从购物车中删除该项目。当我单击该链接时,它应该重新呈现购物车内容以显示该项目已被删除。
当我创建一个包含分面的复合组件并在该分面内放置一个命令链接时,我收到一条错误消息:This link is disabled as it is not nested within a JSF form
我对 有疑问.我想制作悬停效果,但无法将图像加载到 通过 CSS。 CSS: .accountEditBtn { background-image: url('#{request.c
我是新手,但我的操作没有被触发。在 a4j:commandLink id="linklogout"中,我添加了一个不起作用的新操作 menubean.resetMenuActionVariables
我的树表中有很多命令链接,我动态构建它们,如果我想在单击一个命令链接时更改它的颜色,所有命令链接都会更改它们的颜色,我不知道如何做更改此指定链接的颜色,因为我不知道她的号码或 ID,如果有人知道答案,
我有以下 XHTML: TODO supply a title
我有一个包含两个 JSP 的 JSF 应用程序:login.jsp 和 main.jsp。 我有以下 faces-config.xml: package.programs.scorecard.b
写作能力不足请谅解。 我正在测试制作自定义凭证提供程序。我想创建一个 CommandLink 来对提交按钮做同样的事情。我想通过 CommandLink 与“提交”按钮分开登录。目前,只有自定义凭证提
我正在开发一个 JSF 应用程序并想要一个简单的功能 - 单击命令按钮并显示一个命令链接。我做了一个测试。代码: function testfunc() { docu
我在我的应用程序中使用了 icefaces commandLink,我想在水印中添加一个图标。我在 commandLink 中添加了一个属性 styleCss="disconnect",但在渲染过程中
这是我的代码。我在面板网格内有两个图像,这两个图像放置在动画 Javascript 渐变之上。当左侧图像与右侧的注销图标平行放置时(如图所示),注销功能不起作用。当我删除左侧图像时,注销功能正在运行。
我想知道是否可以将 h:commandLink 嵌套到 h:outputFormat 消息中,例如: 消息.属性 disclaimerLink=Click {0] for Disclaimer 现在我
谁能告诉我如何在 WPF 窗口中添加 CommandLink 控件? 这就是我所说的 CommandLink 的意思:http://msdn.microsoft.com/en-us/library/a
如何使用 commandLink 显示图标: outputText (Add) 不可见。 commandLink 支持图标的正确方法是什么?谢谢。 最佳答案
我在延迟加载 Primefaces Datascroller 时遇到问题成分。 我有一个 jsf 页面,它应该在页面加载时显示 10 个事件。如果用户想要查看更多,他/她可以单击更多按钮加载并显示 1
我想使用我的 faces-config.xml (JSF 2.0) 的导航规则功能,但我遇到了一些问题。我有三个文件(index.xhtml、index2.html、index3.xhtml),它们看
我是一名优秀的程序员,十分优秀!