primefaces
Primefaces is a leading JSF library, it provides vast amount of components and facilitates so many kind of utilities and frameworks. This tutorial will highlight the most beneficial utilities and frameworks as well as explain how can we make use all of them more effective in development process.
Primefaces是领先的JSF库,它提供了大量组件,并促进了多种实用程序和框架。 本教程将重点介绍最有用的实用程序和框架 ,并说明如何在开发过程中更有效地利用它们。
RequestContext is a simple utility that can be obtained similarly like FacesContext and can be used for:
RequestContext是一个简单的实用程序,可以像FacesContext一样获得,可以用于:
Let’s first look at the RequestContext API before getting started exploring it.
在开始探索它之前,让我们先看一下RequestContext API。
Method | Description |
---|---|
isAjaxRequest() | Returns a boolean value if current request is a PrimeFaces ajax request. |
addCallBackParam(String name, Object value) | Adds parameters to ajax callbacks like oncomplete. |
update(String clientId); | Specifies component(s) to update at runtime. |
execute(String script) | Executes script after ajax request completes or on page load. |
scrollTo(String clientId) | Scrolls to the component with given clientId after ajax request completes. |
方法 | 描述 |
---|---|
isAjaxRequest() | 如果当前请求是PrimeFaces ajax请求,则返回一个布尔值。 |
addCallBackParam(字符串名称,对象值) | 将参数添加到ajax回调中,例如oncomplete。 |
update(String clientId); | 指定要在运行时更新的组件。 |
执行(字符串脚本) | 在ajax请求完成或页面加载后执行脚本。 |
scrollTo(String clientId) | 在ajax请求完成后滚动到具有给定clientId的组件。 |
Sometimes you’ve faced cases where you need some values from backing beans in ajax callbacks. Callback parameters are serialized to JSON and provided as an argument in ajax callback for such that access.
有时您会遇到需要从ajax回调中的支持bean中获取一些值的情况。 回调参数被序列化为JSON,并作为ajax回调中的参数提供,以进行此类访问。
index.xhtml
index.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
<script>
function handleComplete(xhr,status,args){
var isValid = args.isValid;
alert("isValid RequestContext Parameter Passed Is :: "+isValid);
}
</script>
</h:head>
<h:form>
<p:commandButton value="Validate" action="#{utilitiesManagedBean.validate}"
oncomplete="handleComplete(xhr,status,args)"></p:commandButton>
</h:form>
</html>
UtilitiesManagedBean.java
UtilitiesManagedBean.java
package com.journaldev.prime.faces.beans;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.primefaces.context.RequestContext;
@ManagedBean
@SessionScoped
public class UtilitiesManagedBean {
public String validate(){
// Acquire Request Context instance
RequestContext context = RequestContext.getCurrentInstance();
// Add isValid parameter
context.addCallbackParam("isValid", true);
return "";
}
}
You can send so many parameters as you want, each of yours would be serialized into JSON format. As such, you have the opportunity to send an instance of any type you wish like Person and access its fields like args.person.firstname and so on.
您可以发送任意多个参数,每个参数都将序列化为JSON格式。 这样,您就有机会发送您想要的任何类型的实例(例如Person)并访问其字段(例如args.person.firstname等)。
By default validationFailed callback parameter is added implicitly if validation cycle fails.
默认情况下,如果验证周期失败,则隐式添加validationFailed回调参数。
By using RequestContext instance you have the ability to update page’s components conditionally. You can’t update your components in a conditional manner using of command’s update attribute. By using RequestContext’s update method you’re now gladly can do that.
通过使用RequestContext实例,您可以有条件地更新页面的组件。 您不能使用Command的update属性有条件地更新组件。 通过使用RequestContext的update方法,您现在很高兴可以做到这一点。
index2.xhtml
index2.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form id="form" prependId="false">
<p:growl id="acceptedMessage"></p:growl>
<p:growl id="refusedMessage"></p:growl>
<p:commandButton value="Validate"
action="#{utilitiesManagedBean.validate}"></p:commandButton>
</h:form>
</html>
UtilitiesManagedBean.java
UtilitiesManagedBean.java
package com.journaldev.prime.faces.beans;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.context.RequestContext;
@ManagedBean
@SessionScoped
public class UtilitiesManagedBean {
public String validate(){
// Initial value for valid boolean
boolean valid = false;
// Do some computation
if(Math.floor(Math.random()*10) % 2 == 0){
valid = true;
}
// Acquire Request Context instance
RequestContext context = RequestContext.getCurrentInstance();
// Add isValid parameter
context.addCallbackParam("isValid", valid);
// If valid equal true, render accepted message
if(valid){
// Add message into your FacesContext
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Your request is accepeted ! Congrats"));
// Acquire RequestContext singleton and update desired components
RequestContext.getCurrentInstance().update("acceptedMessage");
}
// else If valid equal false, render refused message
if(!valid){
// Add message into your FacesContext
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Your request is refused ! Sorry"));
// Acquire RequestContext singleton and update desired components
RequestContext.getCurrentInstance().update("refusedMessage");
}
return "";
}
}
RequestContext is also provides you a way to execute a JavaScript when the ajax request completes. It’s easier compared to passing callback parameters and execute conditional JavaScript.
RequestContext还为您提供了一种在ajax请求完成时执行JavaScript的方法。 与传递回调参数和执行条件JavaScript相比,它更容易。
index3.xhtml
index3.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form prependId="false">
<p:commandButton value="Execute JavaScript"
action="#{utilitiesManagedBean.executeJavaScript}"></p:commandButton>
<p:dialog widgetVar="acceptedDialog">
<p:outputLabel value="Accepted"></p:outputLabel>
</p:dialog>
<p:dialog widgetVar="refusedDialog">
<p:outputLabel value="Refused"></p:outputLabel>
</p:dialog>
</h:form>
</html>
UtilitiesManagedBean.java
UtilitiesManagedBean.java
package com.journaldev.prime.faces.beans;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.context.RequestContext;
@ManagedBean
@SessionScoped
public class UtilitiesManagedBean {
public String validate(){
// Initial value for valid boolean
boolean valid = false;
// Do some computation
if(Math.floor(Math.random()*10) % 2 == 0){
valid = true;
}
// Acquire Request Context instance
RequestContext context = RequestContext.getCurrentInstance();
// Add isValid parameter
context.addCallbackParam("isValid", valid);
// If valid equal true, render accepted message
if(valid){
// Add message into your FacesContext
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Your request is accepeted ! Congrats"));
// Acquire RequestContext singleton and update desired components
RequestContext.getCurrentInstance().update("acceptedMessage");
}
// else If valid equal false, render refused message
if(!valid){
// Add message into your FacesContext
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Your request is refused ! Sorry"));
// Acquire RequestContext singleton and update desired components
RequestContext.getCurrentInstance().update("refusedMessage");
}
return "";
}
public String executeJavaScript(){
// Initial value for valid boolean
boolean valid = false;
// Do some computation
if(Math.floor(Math.random()*10) % 2 == 0){
valid = true;
}
// Hide all of dialogs
RequestContext.getCurrentInstance().execute("PF('acceptedDialog').hide()");
RequestContext.getCurrentInstance().execute("PF('refusedDialog').hide()");
// If valid equal true, render accepted message
if(valid){
// Acquire RequestContext singleton and execute wanted JavaScript
RequestContext.getCurrentInstance().execute("PF('acceptedDialog').show()");
}
// else If valid equal false, render refused message
if(!valid){
// Acquire RequestContext singleton and execute wanted JavaScript
RequestContext.getCurrentInstance().execute("PF('refusedDialog').show()");
}
return "";
}
}
Primefaces provides a built-in EL expressions that are very helpful in so many cases. Before getting started using EL functions, let’s see the EL functions’ API.
Primefaces提供了内置的EL表达式,在很多情况下都非常有用。 在开始使用EL函数之前,让我们看一下EL函数的API。
Function | Description |
---|---|
component(‘id’) | Returns clientId of the component with provided server id parameter. This function is useful if you need to work with javascript. |
widgetVar(‘id’) | Provides the widgetVar of a component in PF(”) format. |
功能 | 描述 |
---|---|
组件('id') | 返回具有提供的服务器id参数的组件的clientId。 如果您需要使用javascript,此功能非常有用。 |
widgetVar('id') | 以PF(”)格式提供组件的widgetVar。 |
Primefaces provides you so easy way for locating components either by using their identifiers or their WidgetVars.
Primefaces提供了一种使用组件标识符或WidgetVars轻松定位组件的简便方法。
index4.xhtml
index4.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form id="form">
<p:outputLabel id="text" value="This component accessed by EL function and it's ID is: #{p:component('text')}"></p:outputLabel>
<p:dialog id="dlg">
<p:outputLabel value="Dialog Component"></p:outputLabel>
</p:dialog>
<p:separator/>
<p:commandButton id="action2" value="Show Dialog" type="button" onclick="#{p:widgetVar('form:dlg')}.show()"></p:commandButton>
</h:form>
</html>
We’ve clarified Exception Handler intensively in Ajax Behavior Tutorial.
我们已经在Ajax Behavior Tutorial中集中阐明了Exception Handler。
We’ve clarified Primefaces Locales intensively in Calendar Component Tutorial.
我们在日历组件教程中集中阐明了Primefaces语言环境。
Dialog framework (DF) is used to open an external XHTML page in a dialog that’s generated dynamically at Runtime. This is little bit different from old fashion we are used to show a dialog. Old way requires defining a p:dialog inside an XHTML page and make use of show/hide for getting dialog controlled (Shown/hidden). This time we will use a DF API that in which a programmatic API will be used for creating and destroying the dialogs instantly and at Runtime. Following simple example that shows you dialog created and destroyed programmatically.
对话框框架(DF)用于在运行时动态生成的对话框中打开外部XHTML页面。 这与我们用来显示对话框的旧样式有点不同。 旧方法需要在XHTML页面中定义p:dialog并利用show / hide来控制对话框(显示/隐藏)。 这次,我们将使用DF API,其中将使用编程API来在运行时立即创建和销毁对话框。 下面的简单示例向您显示以编程方式创建和销毁的对话框。
faces-config.xml
faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="https://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://xmlns.jcp.org/xml/ns/javaee https://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
version="2.2">
<application>
<action-listener>org.primefaces.application.DialogActionListener</action-listener>
<navigation-handler>org.primefaces.application.DialogNavigationHandler</navigation-handler>
<view-handler>org.primefaces.application.DialogViewHandler</view-handler>
</application>
</faces-config>
dialogInitiator.xhtml
dialogInitiator.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form id="form">
<p:commandButton value="Show Dialog" action="#{dialogFrameworkManagedBean.showDialog}"></p:commandButton>
</h:form>
</html>
externalXHTML.xhtml
externalXHTML.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form id="form">
<p:outputLabel value="This XHTML page will be dispalyed/hidden via using of DF API"></p:outputLabel>
</h:form>
</html>
DialogFrameworkManagedBean.java
DialogFrameworkManagedBean.java
package com.journaldev.prime.faces.beans;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.primefaces.context.RequestContext;
@ManagedBean
@SessionScoped
public class DialogFrameworkManagedBean {
public String showDialog(){
RequestContext.getCurrentInstance().openDialog("externalXHTML");
return "";
}
}
As you can provide an Optional arguments that help you make additional control for your dialog properties. Following sample shows you how can you provide such that arguments and a figured Table for the properties that may be controlled.
您可以提供Optional参数,以帮助您对对话框属性进行其他控制。 以下示例显示了如何为可控制的属性提供参数和数字表。
dialogInitiator.xhtml
dialogInitiator.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form id="form">
<p:commandButton value="Show Dialog - Basic" action="#{dialogFrameworkManagedBean.showDialog}"></p:commandButton>
<p:commandButton value="Show Dialog - Additional Properties" action="#{dialogFrameworkManagedBean.showDialogWithAdditionalArg}"></p:commandButton>
</h:form>
</html>
externalXHTML.xhtml
externalXHTML.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form id="form">
<p:outputLabel value="This XHTML page will be dispalyed/hidden via using of DF API"></p:outputLabel>
</h:form>
</html>
DialogFrameworkManagedBean.java
DialogFrameworkManagedBean.java
package com.journaldev.prime.faces.beans;
import java.util.HashMap;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.primefaces.context.RequestContext;
@ManagedBean
@SessionScoped
public class DialogFrameworkManagedBean {
public String showDialog(){
RequestContext.getCurrentInstance().openDialog("externalXHTML");
return "";
}
public String showDialogWithAdditionalArg(){
// Fill in properties
Map<String,Object> properties = new HashMap<String,Object>();
properties.put("modal", true);
properties.put("resizable", true);
properties.put("draggable", true);
properties.put("width", 400);
properties.put("height", 400);
RequestContext.getCurrentInstance().openDialog("externalXHTML",properties,null);
return "";
}
}
Find below all of those properties that you may want to provide.
在您可能想要提供的所有这些属性下面查找。
Name | Default | Type | Description |
---|---|---|---|
modal | 0 | Boolean | Controls modality of the dialog. |
resizable | 1 | Boolean | When enabled, makes dialog resizable. |
draggable | 1 | Boolean | When enabled, makes dialog draggable. |
width | auto | Integer | Width of the dialog. |
height | auto | Integer | Height of the dialog. |
contentWidth | 640 | Integer | Width of the dialog content. |
contentHeight | auto | Integer | Height of the dialog content. |
closable | true | Boolean | Whether the dialog can be closed or not. |
名称 | 默认 | 类型 | 描述 |
---|---|---|---|
情态的 | 0 | 布尔型 | 控制对话框的模式。 |
可调整大小 | 1个 | 布尔型 | 启用后,可调整对话框的大小。 |
可拖动的 | 1个 | 布尔型 | 启用后,可使对话框可拖动。 |
宽度 | 汽车 | 整数 | 对话框的宽度。 |
高度 | 汽车 | 整数 | 对话框的高度。 |
contentWidth | 640 | 整数 | 对话框内容的宽度。 |
contentHeight | 汽车 | 整数 | 对话框内容的高度。 |
可关闭 | 真正 | 布尔型 | 对话框是否可以关闭。 |
You can pass data back into the parent page that triggered the dialog to be displayed.
您可以将数据传回到触发该对话框显示的父页面。
dataInitiator.xhtml
dataInitiator.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form id="form">
<p:growl id="growl" showDetail="true" showSummary="true"></p:growl>
<p:commandButton value="Show Dialog - Basic" action="#{dialogFrameworkManagedBean.showDialog}"></p:commandButton>
<p:commandButton value="Show Dialog - Additional Properties" action="#{dialogFrameworkManagedBean.showDialogWithAdditionalArg}"></p:commandButton>
<p:commandButton value="Show Employees Dialog" action="#{dialogFrameworkManagedBean.showEmployeesDialog}">
<p:ajax event="dialogReturn" listener="#{dialogFrameworkManagedBean.onEmployeeChosen}" update="growl" />
</p:commandButton>
</h:form>
</html>
employee.xhtml
employee.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form id="form">
<p:dataTable value="#{dialogFrameworkManagedBean.employees}" var="employee">
<p:column headerText="Employee ID">
<p:outputLabel value="#{employee.employeeId}"></p:outputLabel>
</p:column>
<p:column headerText="Employee Name">
<p:outputLabel value="#{employee.employeeName}"></p:outputLabel>
</p:column>
<p:column headerText="Select Employee">
<p:commandButton icon="ui-icon-search" action="#{dialogFrameworkManagedBean.selectEmployeeFromDialog(employee)}" />
</p:column>
</p:dataTable>
</h:form>
</html>
DialogFrameworkManagedBean.java
DialogFrameworkManagedBean.java
package com.journaldev.prime.faces.beans;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;
@ManagedBean
@SessionScoped
public class DialogFrameworkManagedBean {
private List<Employee> employees = new ArrayList<Employee>();
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this.employees = employees;
}
public String showDialog(){
RequestContext.getCurrentInstance().openDialog("externalXHTML");
return "";
}
public String showDialogWithAdditionalArg(){
// Fill in properties
Map<String,Object> properties = new HashMap<String,Object>();
properties.put("modal", true);
properties.put("resizable", true);
properties.put("draggable", true);
properties.put("width", 400);
properties.put("height", 400);
RequestContext.getCurrentInstance().openDialog("externalXHTML",properties,null);
return "";
}
public String showEmployeesDialog(){
this.employees = new ArrayList<Employee>();
for(int i = 1 ; i < 10 ; i++){
Employee employee = new Employee();
employee.setEmployeeId(i);
employee.setEmployeeName("Employee"+i);
employee.setEmployeeAge(String.valueOf(21+i));
this.employees.add(employee);
}
RequestContext.getCurrentInstance().openDialog("employees");
return "";
}
public void selectEmployeeFromDialog(Employee employee) {
RequestContext.getCurrentInstance().closeDialog(employee);
}
public void onEmployeeChosen(SelectEvent event){
Employee employee = (Employee) event.getObject();
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
"Employee Selected",
"Id:" + employee.getEmployeeId()+"\n"+
"Name:"+employee.getEmployeeName());
FacesContext.getCurrentInstance().addMessage(null, message);
}
public class Employee {
private int employeeId;
private String employeeName;
private String employeeAge;
public int getEmployeeId() {
return employeeId;
}
public void setEmployeeId(int employeeId) {
this.employeeId = employeeId;
}
public String getEmployeeName() {
return employeeName;
}
public void setEmployeeName(String employeeName) {
this.employeeName = employeeName;
}
public String getEmployeeAge() {
return employeeAge;
}
public void setEmployeeAge(String employeeAge) {
this.employeeAge = employeeAge;
}
}
}
Here’s detailed explanation for code listed above:
这是上面列出的代码的详细说明:
It’s well-known how can you add a messages into your view or even a dialog using a standard FacesContext – addMessage way. Dialog framework has provided a new way of adding a messages into your opened dialog. Following sample will help you getting your messages shown using a non-traditional way.
众所周知,如何使用标准FacesContext – addMessage方式将消息添加到视图甚至对话框中。 对话框框架提供了一种将消息添加到打开的对话框中的新方法。 以下示例将帮助您以非传统方式显示您的消息。
employees.xhtml
employees.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form id="form">
<p:dataTable value="#{dialogFrameworkManagedBean.employees}" var="employee">
<p:column headerText="Employee ID">
<p:outputLabel value="#{employee.employeeId}"></p:outputLabel>
</p:column>
<p:column headerText="Employee Name">
<p:outputLabel value="#{employee.employeeName}"></p:outputLabel>
</p:column>
<p:column headerText="Select Employee">
<p:commandButton icon="ui-icon-search" action="#{dialogFrameworkManagedBean.selectEmployeeFromDialog(employee)}" />
</p:column>
</p:dataTable>
<p:commandButton value="Show Message" action="#{dialogFrameworkManagedBean.showMessage}"></p:commandButton>
</h:form>
</html>
DialogFrameworkManagedBean.java
DialogFrameworkManagedBean.java
package com.journaldev.prime.faces.beans;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;
@ManagedBean
@SessionScoped
public class DialogFrameworkManagedBean {
private List<Employee> employees = new ArrayList<Employee>();
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this.employees = employees;
}
public String showDialog(){
RequestContext.getCurrentInstance().openDialog("externalXHTML");
return "";
}
public String showDialogWithAdditionalArg(){
// Fill in properties
Map<String,Object> properties = new HashMap<String,Object>();
properties.put("modal", true);
properties.put("resizable", true);
properties.put("draggable", true);
properties.put("width", 400);
properties.put("height", 400);
RequestContext.getCurrentInstance().openDialog("externalXHTML",properties,null);
return "";
}
public String showEmployeesDialog(){
this.employees = new ArrayList<Employee>();
for(int i = 1 ; i < 10 ; i++){
Employee employee = new Employee();
employee.setEmployeeId(i);
employee.setEmployeeName("Employee"+i);
employee.setEmployeeAge(String.valueOf(21+i));
this.employees.add(employee);
}
RequestContext.getCurrentInstance().openDialog("employees");
return "";
}
public void selectEmployeeFromDialog(Employee employee) {
RequestContext.getCurrentInstance().closeDialog(employee);
}
public void onEmployeeChosen(SelectEvent event){
Employee employee = (Employee) event.getObject();
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
"Employee Selected",
"Id:" + employee.getEmployeeId()+"\n"+
"Name:"+employee.getEmployeeName());
FacesContext.getCurrentInstance().addMessage(null, message);
}
public String showMessage(){
RequestContext.getCurrentInstance().showMessageInDialog(new FacesMessage("Message Is Shown"));
return "";
}
public class Employee {
private int employeeId;
private String employeeName;
private String employeeAge;
public int getEmployeeId() {
return employeeId;
}
public void setEmployeeId(int employeeId) {
this.employeeId = employeeId;
}
public String getEmployeeName() {
return employeeName;
}
public void setEmployeeName(String employeeName) {
this.employeeName = employeeName;
}
public String getEmployeeAge() {
return employeeAge;
}
public void setEmployeeAge(String employeeAge) {
this.employeeAge = employeeAge;
}
}
}
We’ve introduced several tutorials that are using search expression framework. But it’s worth to take a deep look to know more about it. Core JSF component referencing is based on component identifiers only with basic keyword support. Primefaces search expression framework provides both server side and client side extensions to make it easier to reference components. Let’s see all the keywords that you can use to reference the components that might be located into your view.
我们已经介绍了一些使用搜索表达式框架的教程。 但是值得深入了解以了解更多信息。 核心JSF组件引用仅基于具有基本关键字支持的组件标识符。 Primefaces搜索表达框架提供了服务器端和客户端扩展,从而使引用组件变得更加容易。 让我们查看所有可用于引用可能位于视图中的组件的关键字。
Keyword | Type | Description |
---|---|---|
@this | Standard | Current component. |
@all | Standard | Whole view. |
@form | Standard | Closest ancestor form of current component. |
@none | Standard | No component. |
@namingcontainer | PrimeFaces | Closest ancestor naming container of current component. |
@parent | PrimeFaces | Parent of the current component. |
@composite | PrimeFaces | Closest composite component ancestor. |
@child(n) | PrimeFaces | nth child. |
@previous | PrimeFaces | Previous sibling. |
@next | PrimeFaces | Next sibling. |
@widgetVar(name) | PrimeFaces | Component with given widgetVar. |
关键词 | 类型 | 描述 |
---|---|---|
@这个 | 标准 | 当前组件。 |
@所有 | 标准 | 整个视图。 |
@形成 | 标准 | 当前组件的最接近祖先形式。 |
@没有 | 标准 | 无组件。 |
@namingcontainer | 素颜 | 当前组件的最近祖先命名容器。 |
@父母 | 素颜 | 当前组件的父级。 |
@综合 | 素颜 | 最接近的复合组件祖先。 |
@child(n) | 素颜 | 第n个孩子。 |
@以前 | 素颜 | 以前的兄弟姐妹。 |
@下一个 | 素颜 | 下一个兄弟姐妹。 |
@widgetVar(名称) | 素颜 | 具有指定的widgetVar的组件。 |
Let’s see now some of examples for how can we leverage some of these keywords for locating wanted components on a page.
现在让我们看一些示例,说明如何利用这些关键字在页面上查找所需组件。
SEF.xhtml
SEF.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form>
<p:growl id="message"></p:growl>
<p:outputLabel id="output1" value="Enter Username">#{' '}</p:outputLabel><p:inputText id="username" value="#{searchExtensionFramework.username}"></p:inputText>
<p:separator/>
<p:outputLabel id="output2" value="Enter Password">#{' '}</p:outputLabel><p:password id="password" value="#{searchExtensionFramework.password}"></p:password>
<p:separator/>
<p:commandButton value="Reference Message Component"
action="#{searchExtensionFramework.doAction}"
process="@this" update="@form:@child(0)"></p:commandButton>
</h:form>
</html>
SearchExtensionFramework.java
SearchExtensionFramework.java
package com.journaldev.prime.faces.beans;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
@ManagedBean
@SessionScoped
public class SearchExtensionFramework {
private String username = "";
private String password = "";
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String doAction(){
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage("Growl Component Updated and Referenced By Using SEF","Username: "
+ this.username + " :: Password: " + password));
return "";
}
}
SEF.xhtml
SEF.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form>
<p:growl widgetVar="message"></p:growl>
<p:outputLabel id="output1" value="Enter Username">#{' '}</p:outputLabel><p:inputText id="username" value="#{searchExtensionFramework.username}"></p:inputText>
<p:separator/>
<p:outputLabel id="output2" value="Enter Password">#{' '}</p:outputLabel><p:password id="password" value="#{searchExtensionFramework.password}"></p:password>
<p:separator/>
<p:commandButton value="Reference Message Component"
action="#{searchExtensionFramework.doAction}"
process="@this" update="@widgetVar(message)"></p:commandButton>
</h:form>
</html>
You will get the same result when @widgetVar alone is used.
当单独使用@widgetVar时,您将获得相同的结果。
Primefaces integrates jQuery Selector API with JSF component referencing model so that referencing can be done using of jQuery Selector API instead of code id based JSF model.
Primefaces将jQuery Selector API与JSF组件引用模型集成在一起,因此可以使用jQuery Selector API代替基于代码ID的JSF模型来进行引用。
SEF.xhtml
SEF.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form>
<p:growl></p:growl>
<p:outputLabel id="output1" value="Enter Username">#{' '}</p:outputLabel><p:inputText id="username" value="#{searchExtensionFramework.username}"></p:inputText>
<p:separator/>
<p:outputLabel id="output2" value="Enter Password">#{' '}</p:outputLabel><p:password id="password" value="#{searchExtensionFramework.password}"></p:password>
<p:separator/>
<p:commandButton value="Reference Message Component"
action="#{searchExtensionFramework.doAction}"
process="@this" update="@(form:first)"></p:commandButton>
</h:form>
</html>
.myStyle
; by using of @(.myStyle)
you would be able to specify the component(s) that have it. 当您使用JQuery表达式形式时,您将获得相同的结果。 假设您的输入具有.myStyle
样式; 通过使用@(.myStyle)
您将可以指定具有它的组件。 @(:input)
in the update or process, you’re trying to update or process all input components that you have. 如果在更新或过程中使用了@(:input)
,则尝试更新或处理您拥有的所有输入组件。 Primefaces is a leading implementation of JSF. It provides you a huge amount of accompanies utilities, frameworks and enhancements that make development tasks more easier than using otherwise implementation. This tutorial have highlighted part of these utilities and frameworks. Contribute us by commenting below and find downloaded source code.
Primefaces是JSF的领先实现。 它为您提供了大量附带的实用程序,框架和增强功能,这些功能使开发任务比使用其他实现更容易。 本教程重点介绍了这些实用程序和框架的一部分。 通过在下面评论来贡献我们,并找到下载的源代码。
primefaces