我在里面有一段代码 h:form
<h:panelGrid id="captchaGrid">
<p:captcha id="captcha" label="Captcha" required="true"
requiredMessage="required"
validatorMessage="...">
</p:captcha>
<p:message id="captchaMessage" for="captcha" />
</h:panelGrid>
<p:commandButton id="submitButton" value="save"
actionListener="#{userBean.save}" update="captchaGrid"
onstart="doSomething()"
oncomplete="doSomethingElse(xhr, status, args)" icon="ui-icon-check">
</p:commandButton>
Run Code Online (Sandbox Code Playgroud)
如果我正确输入验证码,这可以正常工作.但是,如果我输入的值无效,则验证码组件就会消失.
我尝试删除该update="captchaGrid"
属性.这一次,验证码并没有消失.相反,它没有在视觉上刷新,但(我猜)在内部.因为正确键入两个单词仍会生成验证错误.
此外; 我不想用ajax="false"
.
更新:我也试过了oncomplete="Recaptcha.reload()"
.没工作.有一个错误.但我不知道这是我的代码还是Primefaces 3.0 :)
更新2:正如maple_shaft所指出的,事实证明这是Primefaces/Recaptcha的一个问题.所以我正在寻找你可能建议的任何肮脏的黑客.
任何帮助赞赏.
我有一个JSF视图,列出了Primefaces中集合中的项目DataTable
.最右边的列包含删除按钮.单击删除按钮时,应该进行Ajax调用,从会话变量中删除相应的项目Cart
并就地更新视图.我希望请求和视图更改尽可能小.
以下是我为此目的所做的事情:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Register user</title>
</h:head>
<h:body>
<f:view>
<h:form id="itemsForm">
<p:outputPanel id="items">
<p:dataTable value="#{cart.itemList}" var="item">
<p:column>
<f:facet name="header">
<h:outputText value="name" />
</f:facet>
<h:outputText value="#{item.product.description}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="quantity" />
</f:facet>
<h:outputText value="#{item.quantity}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="" />
</f:facet>
<p:commandButton icon="ui-icon-close" title="remove from cart">
<p:ajax listener="#{cart.removeItem}"
update="form:itemsForm"
process="@this" />
</p:commandButton>
</p:column>
<f:facet name="footer">
Total amount: ${cart.totalAmount}
</f:facet>
</p:dataTable>
</p:outputPanel>
</h:form>
</f:view>
</h:body>
</html>
Run Code Online (Sandbox Code Playgroud)
因此,我有以下方法 …
onclick
我的属性commandButton
里面有一些EL依赖的Javascript.更具体地说,这是一段代码:
<p:commandButton
onclick="javascript: if('#{userBean.user.friendList.size() gt 0}' == 'true') deleteFriendsConfirmDialog.show(); else friendsAlreadyDeletedErrorDialog.show();"
value="Delete all friends?" />
Run Code Online (Sandbox Code Playgroud)
deleteFriendsConfirmDialog
清除朋友列表并更新@form
.朋友列表,commandButton和对话框都是这种形式.
所以我点击按钮,确认对话框出现(因为朋友列表的长度是gt 0),我确认并清空列表,视图更新.但是,当我Delete all friends?
再次单击该按钮时,将再次出现确认对话框.由于列表的长度现在为0,因此我希望显示错误对话框.
我想,这是因为内部写的Javascript onclick
没有更新(虽然按钮在表单中).
编辑:更改#{userBean.user.friendList.size() gt 0}
为#{not empty userBean.user.friendList}
既不起作用也不起作用.
怎么会?这有什么不对?
任何帮助赞赏.:)
我安装了Weblogic 10.3.5.我在服务器上部署了一个带有JSF 2.0和JSTL 1.2的WAR.但我也需要EL 2.2功能.我需要什么JAR?如果有人可以从头开始指导我一步一步的指导,那就太好了,因为我一直试图将这个问题设置好几个小时而没有运气.
使用JSF 2.0和EL,我试图在POJO上调用一个方法,POJO是一个viewscoped bean的属性.该代码实际上是非常相似的@BalusC的教程在这里.当我调用一个不带参数的方法时,一切都很好.但是当我尝试调用一个带参数的方法时,我得到以下异常:
javax.faces.el.MethodNotFoundException: javax.el.MethodNotFoundException:
/user.xhtml at line 42 and column 32 action="#{users.user.removeFriend(friend)}":
Method not found: model.User@67f2b0dd.removeFriend()
Run Code Online (Sandbox Code Playgroud)
以下是一些更多细节:
user.xhtml
<f:metadata>
<f:viewParam name="id" value="#{users.id}" />
<f:event type="preRenderView" listener="#{users.init}" />
</f:metadata>
...
<h:form id="usersForm">
<p:outputPanel>
<p:dataTable id="userTable" value="#{users.user.friendList}" var="friend">
<p:column>
<h:outputText value="#{friend.name}" />
</p:column>
<p:column>
<p:commandButton action="#{users.user.removeFriend(friend)}"
ajax="true"
update="userTable somethingElse" process="@this"
onerror="errorDialog.show();"
icon="ui-icon-delete"
title="delete user">
</p:commandButton>
</p:column>
</p:dataTable>
</p:outputPanel>
<p:commandButton action="#{users.user.removeAllFriends()}" ajax="true"
update="userTable somethingElse"
process="@this"
icon="ui-icon-close"
value="delete all friends?">
</p:commandButton>
</h:form>
Run Code Online (Sandbox Code Playgroud)
我有以下ViewScoped
bean:
Users.java
@ManagedBean(name = "users") …
Run Code Online (Sandbox Code Playgroud)