只有当onclick / oncomplete / on …事件发生时,而不是页面加载时,如何调用JSF backing bean方法
我有两个图像button:
<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>
然而,当页面加载值1和2时,这两个方法立即被调用。另外,当我点击它时,两个方法都被调用。
我怎样才能实现所需的function,只有在图像button被实际点击时调用bean方法?
这种做法是行不通的。 您似乎混淆了“服务器端”和“客户端”的基本Web开发概念,并误解了JSF和EL的angular色。
JSF是一种服务器端语言,它通过HTTP请求在networking服务器上运行,并产生HTML / CSS / JS代码,并返回HTTP响应。 在生成HTML输出期间,所有以${}
和#{}
forms的ELexpression式都将在服务器端执行。 JavaScript是一种在Web浏览器上运行并在HTML DOM树上工作的客户端语言。 HTML onclick属性应该指定一个JavaScript函数,它将在客户端在特定的HTML DOM事件中执行。
为了调用JSF托pipebean方法,您需要action
或*listener
属性。 JSF提供组件来生成所需的HTML,并指定所需的ajax操作,这将改变服务器端的状态。 可以使用<h:commandButton image>
生成<input type="image">
<h:commandButton image>
。 一个bean方法可以被该组件的action
属性调用。 该组件可以通过embedded<f:ajax>
标签来实现。
所以,下面应该为你做:
<h:form> <div class="sidebarOptions"> <h:commandButton image="images/homeButton.jpg" action="#{home.setRendered(1)}"> <f:ajax execute="@this" render=":sidebar" /> </h:commandButton> </div> <div class="sidebarOptions"> <h:commandButton image="images/memberButton.jpg" action="#{home.setRendered(2)}"> <f:ajax execute="@this" render=":sidebar" /> </h:commandButton> </div> </h:form> <!-- The below is just a guess of what you're really trying to achieve. --> <h:panelGroup id="sidebar" layout="block"> <h:panelGroup rendered="#{home.rendered eq 1}"> Home </h:panelGroup> <h:panelGroup rendered="#{home.rendered eq 2}"> Member </h:panelGroup> </h:panelGroup>
也可以看看:
- action和actionListener之间的区别
- 如何在JSF组件的on *属性中调用托pipebean操作方法
- 如何使用本地JavaScript在HTML DOM事件上调用JSF托pipebean?
- 处理Java EE前端方法中的服务层exception
- 如何用自定义样式覆盖默认的PrimeFaces CSS?
- 如何将文件写入应用程序的资源/图像文件夹?
- ViewParam vs @ManagedProperty(value =“#{param.id}”)
- 在例如p:dataTable分页期间如何减lessp:ajax的请求负载
- h:outputText不会将\ r \ n字符分隔成新的行
- 上传的图像仅在刷新页面后才可用
- 在JSF托pipebean中启动新线程安全吗?
- 列表<T>上的UISelectMany导致java.lang.ClassCastException:java.lang.String不能转换为T