我有两个图像按钮:
<div class="sidebarOptions">
<input type="image" src="images/homeButton.jpg" onclick="#{home.setRendered(1)}"/>
</div>
<div class="sidebarOptions">
<input type="image" src="images/memberButton.jpg" onclick="#{home.setRendered(2)}"/>
</div>
Run Code Online (Sandbox Code Playgroud)
但是,当页面加载值1和2时,这两种方法都会立即被调用。同样,当我单击它时,这两种方法也会被调用。
当实际单击图像按钮时,如何才能实现仅调用bean方法的所需功能?
我正在创建一个动态生成的菜单.在数据库中,我已经存储了String每个子菜单的directory()并存储在ArrayListbean中.这是代码的一部分:
<c:forEach items="#{controlWeb.algorithms}" var="alg">
<h:form>
<h:commandLink actionListener="#{controlWeb.setContent(PROBLEM)}" value="About"/>
</h:form>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
问题出在"问题"中.我想写#{alg.algorithm1},但它不起作用,因为我认为嵌套EL表达式是不可行的.
该actionListener设置String #{alg.algorithm1}在另一个String.我怎样才能达到要求?
我正在努力将Primefaces bean属性直接发送到javascript,以便打开一个新页面并将bean属性的内容写入新页面.
我正在使用Primefaces 4.0.
我有一个这样的命令按钮:
<p:commandButton id="buttonId" update="buttonId, otherComponentId"
value="press me" process="@this" actionListener="#{homeController.myMethod}"
oncomplete="handleComplete(xhr, status, args)">
</p:commandButton>
Run Code Online (Sandbox Code Playgroud)
在handleComplete中,javascript函数args未定义,但不是xhr和status.javascript函数定义:
function handleComplete(xhr, status, args){
var w = window.open();
w.document.open();
alert(xhr.responseText.substring(100));
alert(status);
alert(args);
var d = '<head></head><body>'+ args.firstParam +'<body>';
w.document.write(d);
w.document.close();
}
Run Code Online (Sandbox Code Playgroud)
首先警告它给我页面,第二个解析错误,错误是:Uncaught TypeError:无法读取未定义的属性'firstParam'
我想在args中传入一个这样的字符串:
public String MyMethod() {
RequestContext context = RequestContext.getCurrentInstance();
context.addCallbackParam("firstParam", "my string");
return "";
}
Run Code Online (Sandbox Code Playgroud)
并使用javascript访问它args.firstParam.
该方法被调用,(我有一些工作的打印屏幕.)
我必须尝试这种方式,而不是将文本设置为
<h:outputText id="myText" escape="false" rendered="true"
value="#{homeController.property}" />
Run Code Online (Sandbox Code Playgroud)
然后得到这个元素的innerHTML,因为我将使用innerHTML获得的内容与bean中的字符串变量不同.这种方法有效但不是我想要的.我想知道为什么args对象是未定义的,或者我怎样才能从javascript中管理bean属性.谢谢.
我正在使用Glassfish 3.1.2.2和JSF Mojarra 2.1.6.
我有以下Facelets页面:
<h:form>
<h:commandLink value="link">
<f:actionListener binding="#{backingBean.someMethod(1)}"/>
</h:commandLink>
</h:form>
Run Code Online (Sandbox Code Playgroud)
以下支持bean:
@RequestScoped
@ManagedBean
public class BackingBean {
public void someMethod(int i) {
System.out.println("It was called: " + i);
}
}
Run Code Online (Sandbox Code Playgroud)
当我单击链接时,控制台中出现"Info:It called called:1".
binding读取文档:
图书馆:http://xmlns.jcp.org/jsf/core,http://java.sun.com/jsf/core(Jsf Core)
标签:actionListener
捆绑
值绑定表达式,其值为实现javax.faces.event.ActionListener 的对象.[强调我的]
此外,该问题的接受答案表明,f:actionListener调用任意方法是不可能的.
如果不支持,为什么调用backing bean方法?
我不清楚这两种方法之间的区别.我看到actionListener将ActionEvent作为参数,但两者都可以绑定到辅助bean中的方法.
ActionEvent参数唯一的功能区别是什么?所以如果我需要ActionEvent使用监听器方法,如果没有,那么它们都可以工作吗?
当我单击每行中出现的数据表中的命令按钮时,我收到以下错误.通过查看示例,我了解到一旦单击了commandbutton,就会首先执行以下代码
<f:setPropertyActionListener value="#{detailRow}" target="#{tableBeanDetail.selectedEntry}" />
Run Code Online (Sandbox Code Playgroud)
然后是与以下bean方法关联的代码
<p:commandButton id="detailsButton" actionListener="#{tableBeanDetail.onRowSelect}" icon="ui-icon-
search" title="View Details">
Run Code Online (Sandbox Code Playgroud)
在我的onRowSelect中我试图做以下事情:
public String onRowSelect(ActionEvent event) throws Exception {
// Get key fields from row data and set the parameters that needs to be passed w
.....
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
我正在尝试创建一个对话框,用于创建对象和更新对象.因此,如果我碰巧点击"新建"按钮,我将看到一个包含要填充的空字段的对话框,或者如果我单击某个条目的编辑按钮,该条目的数据将显示在对话框中以进行更新.
按照版本5.2的primefaces展示中的示例,我可以以只读的outputText形式呈现数据,但是当我将其更改为inputText时,该字段保持为空.以下代码是我的例子:
<h:form id="form">
<p:dataGrid id="guestList" var="guest" value="${guestList.guests}" columns="3" paginator="true" rows="20">
<f:facet name="header">
Guest List
</f:facet>
<p:panel>
<h:outputText value="${guest.name}" />
<br />
<h:outputText value="${guest.street}" />
<br />
<h:outputText rendered="#{guest.street2.length() gt 0}"
value="${guest.street2}" />
<h:panelGroup rendered="#{guest.street2.length() gt 0}">
<br />
</h:panelGroup>
<h:outputText value="${guest.city}, " />
<h:outputText value="${guest.state} " />
<h:outputText value="${guest.zipCode}" />
<p:commandButton update="@form:newGuestDetail" oncomplete="PF('newGuestDialog').show()" icon="ui-icon-edit" styleClass="ui-btn-inline">
<h:outputText styleClass="ui-icon ui-icon-edit" style="margin:0 auto;" />
<f:setPropertyActionListener value="#{guest}" target="#{guestList.selectedGuest}" />
</p:commandButton>
</p:panel>
</p:dataGrid>
<p:dialog header="#{guestList.hasSelected() ? 'Edit Guest' : 'New Guest'}" widgetVar="newGuestDialog" modal="true" showEffect="fade" …Run Code Online (Sandbox Code Playgroud) 我有一个包含一些必填字段的表单,具体取决于 a selectOneMenu,如下所示:
<p:selectOneMenu id="myList" value="#{myBean.selectedItem}">
<p:selectItems value="#{myBean.myItems}" />
<p:ajax listener="#{myBean.myList_change}"
process="myList field1 field2 field3"
update="field1 field2 field3" />
</p:selectOneMenu>
<p:inputNumber id="field1" required="true" />
<p:inputNumber id="field2" required="#{myBean.selectedItem gt 1}" />
<p:inputNumber id="field3" required="#{myBean.selectedItem gt 2}" />
Run Code Online (Sandbox Code Playgroud)
我第一次按下提交按钮时,没有填写必填字段:
<p:commandButton id="mySubmit" action="#{myBean.myAction}" />
Run Code Online (Sandbox Code Playgroud)
我收到验证错误,然后如果我更改selectOneMenu值,将不再评估所需的表达式。
例如,如果我提交表单时selectedItem equals to 3出现所有验证错误,那么我提交表单时selectedItem equals to 1,primefaces 仍然要求所有三个字段都为必填字段。
我尝试向按钮添加一个 resetInput:
<p:resetInput target=":myForm" />
Run Code Online (Sandbox Code Playgroud)
而不是immediate="true"到了selectOneMenu,没有任何成功。
有什么想法吗?
注意:PrimeFaces 版本为 6.2
PS:在图片中,只需要第一个字段,但应该需要所有元素。
遵循完整的最小可重现示例:
xhtml 文件 (test.xhtml):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE …Run Code Online (Sandbox Code Playgroud) 我有以下按钮:
<h:commandButton
disabled="#{mybean.searching}"
binding="#{mybean.searchButton}"
actionListener="#{mybean.searchForLicenses}"
value="Search" />
Run Code Online (Sandbox Code Playgroud)
当我调试时,我看到actionListener首先被调用两次,然后被调用三次,接下来单击四次,依此类推.
似乎每次重新加载时actionListener都会再次注册.
我正在使用Mojarra 2.1.3(也尝试过2.0.6)和Tomcat 7和IceFaces.
绑定是这样完成的:
private javax.faces.component.UICommand searchButton;
public void setSearchButton(UICommand searchButton) {
this.searchButton = searchButton;
}
public UICommand getSearchButton() {
return searchButton;
}
Run Code Online (Sandbox Code Playgroud) 从这个答案由BalusC这里的行动和ActionListener的差异,Use actionListener if you want have a hook before the real business action get executed, e.g. to log it, and/or to set an additional property (by <f:setPropertyActionListener>,.但是,当我决定编写一些代码来测试它时,结果有点不同.这是我的小代码
<h:form id="form">
<h:panelGroup id="mygroup">
<p:dataTable id="mytable" value="#{viewBean.foodList}" var="item">
<p:column>
#{item}
</p:column>
<p:column>
<p:commandButton value="delete"
action="#{viewBean.delete}"
update=":form:mygroup">
<f:setPropertyActionListener target="#{viewBean.selectedFood}"
value="#{item}"/>
</p:commandButton>
</p:column>
</p:dataTable>
</h:panelGroup>
</h:form>
Run Code Online (Sandbox Code Playgroud)
这是我的豆子
@ManagedBean
@ViewScoped
public class ViewBean {
private List<String> foodList;
private String selectedFood;
@PostConstruct
public void init(){
foodList = new ArrayList<String>();
foodList.add("Pizza");
foodList.add("Pasta");
foodList.add("Hamburger");
} …Run Code Online (Sandbox Code Playgroud)