В этом учебном пособии используются серверы maven, java8, glasifish.
-
Вариант использования: ** Если вы хотите открыть новую страницу, нажав на кнопку, ссылку или что-то в этом роде. Даже если URL-адрес страницы адресован непосредственно бином, мы можем это сделать. Но если URL-адрес страницы является динамическим, это не так просто, потому что к тому моменту, когда вы нажмете кнопку, страница уже будет отображена, и вы получите старое значение. Итак, в этом случае я собираюсь реализовать этот вариант использования.
Есть несколько шагов для реализации этого,
, Создать проект Primefaces maven, скачать Glassfish и добавить его в
серверная часть затмения.
, Разверните приложение и протестируйте.
1. Структура проекта
Изображение://wp-content/uploads/2017/09/primafaces-open-windows-project-stucture.png[изображение]
2. Зависимости проекта
Я только добавил Primefaces, JSF библиотеки.
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>simple.primefaces.app</groupId> <artifactId>simple.primefaces.app</artifactId> <version>2017.09.01</version> <packaging>war</packaging> <name>primefaces-app</name> <dependencies> <!-- https://mvnrepository.com/artifact/org.primefaces/primefaces --> <dependency> <groupId>org.primefaces</groupId> <artifactId>primefaces</artifactId> <version>5.0</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.faces/jsf-api --> <dependency> <groupId>javax.faces</groupId> <artifactId>jsf-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.omnifaces/omnifaces --> <dependency> <groupId>org.omnifaces</groupId> <artifactId>omnifaces</artifactId> <version>2.6.4</version> </dependency> </dependencies> <build> <sourceDirectory>src</sourceDirectory> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.0.0</version> <configuration> <warSourceDirectory>WebContent</warSourceDirectory> </configuration> </plugin> </plugins> </build> </project>
3. Код
Созданы Bean, Converter и Enum и index.xhtml (facelet)
MyBean.java
package simple.primefaces.app; import java.util.Arrays; import java.util.List; import javax.faces.bean.ManagedBean; @ManagedBean public class MyBean { private static final String GOOGLE = "https://www.google.co.in/"; private static final String YAHOO = "https://in.yahoo.com/"; private WebOptions selectedOption; private String webOptionUrl; public String getWebOptionUrl() { return webOptionUrl; } public void setWebOptionUrl(String webOptionUrl) { this.webOptionUrl = webOptionUrl; } public void prepareUrl(){ if(WebOptions.GOOGLE.equals(selectedOption)){ webOptionUrl = GOOGLE; } else if(WebOptions.YAHOO.equals(selectedOption)) { webOptionUrl = YAHOO; } else { webOptionUrl = ""; } } public List<WebOptions> getAllWebOptions() { return Arrays.asList(WebOptions.values()); } public WebOptions getSelectedOption() { return selectedOption; } public void setSelectedOption(WebOptions selectedOption) { this.selectedOption = selectedOption; } }
WebOptionConverter.java
package simple.primefaces.app; import java.io.Serializable; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.convert.Converter; import javax.faces.convert.FacesConverter; import org.omnifaces.cdi.ViewScoped; @FacesConverter(value = "simple.primefaces.app.WebOptionConverter", forClass = WebOptionConverter.class) @ViewScoped public class WebOptionConverter implements Converter, Serializable { /** ** the serialVersionUID ** ** / private static final long serialVersionUID = -218581226063576481L; public WebOptionConverter(){ super(); } @Override public Object getAsObject(FacesContext context, UIComponent component, String value) { return WebOptions.getOptionByOptoin(value); } @Override public String getAsString(FacesContext context, UIComponent component, Object value) { if(value instanceof WebOptions){ final WebOptions objectStatus = (WebOptions) value; return objectStatus.getWebOption(); } return ""; } }
WebOptions.java
package simple.primefaces.app; public enum WebOptions { GOOGLE("google"), YAHOO("yahoo"); private String webOption; WebOptions(String webOption){ this.webOption = webOption; } public static WebOptions getOptionByOptoin(String value){ if(WebOptions.GOOGLE.webOption.equals(value)){ return WebOptions.GOOGLE; } return WebOptions.YAHOO; } public String getWebOption() { return webOption; } }
index.xhtml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <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:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui"> <h:head> <script type="text/javascript"> function openUrl(){ var webOptionUrl = document.getElementById("websiteForm:webOptionHidden").value; if(webOptionUrl.length === 0){ var message = 'Please select website'; alert(message); } else { window.open(webOptionUrl, '', 'width=1024, height=720, status=no, scrollbars=1 menubar=no, toolbar=no'); } } </script> </h:head> <h:body> <h:form id="websiteForm"> <p:panelGrid id="selectOption" style="margin-left:500px;"> <p:row> <p:column> <p:outputLabel value="Please select website: "></p:outputLabel> <p:selectOneMenu id="option" value="#{myBean.selectedOption}"> <f:selectItem itemLabel="--" itemValue=""/> <f:selectItems value="#{myBean.allWebOptions}" var="o" itemLabel="#{o.webOption}" itemValue="#{o}"/> <p:ajax update="@form" process="@this" listener="#{myBean.prepareUrl}"></p:ajax> <f:converter converterId="simple.primefaces.app.WebOptionConverter"/> </p:selectOneMenu> </p:column> </p:row> <p:row> <p:column> <p:commandButton id="submitButton" value="Submit" oncomplete="openUrl();" update="webOptionHidden"/> <p:inputText id="webOptionHidden" value="#{myBean.webOptionUrl}" style="display:none;"/> </p:column> </p:row> </p:panelGrid> </h:form> </h:body> </html>
Web.xhtml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app__3__0.xsd" id="WebApp__ID" version="3.0"> <display-name>simple.primefaces.app</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.xhtm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <context-param> <param-name>com.sun.faces.enableRestoreView11Compatibility</param-name> <param-value>true</param-value> </context-param> </web-app>
4, Демо
Создайте приложение, добавьте его на сервер и запустите приложение.
4.1 Если вы запустите приложение, экран будет выглядеть так,
Изображение://wp-content/uploads/2017/09/primafaces-open-windows-demo1.png[изображение]
4.2 Если вы не выберете какую-либо опцию, вам будет предложено выбрать опцию.
Изображение://wp-content/uploads/2017/09/primafaces-open-windows-demo2.png[изображение]
4.3 На данный момент я добавил две страницы google и yahoo. Если вы выберете любую из них, соответствующий веб-сайт откроется в другом окне.
Изображение://wp-content/uploads/2017/09/primafaces-open-windows-demo3.png[изображение]
Изображение://wp-content/uploads/2017/09/primafaces-open-windows-demo4.png[изображение]
4.4 Теперь я объясню трюк, надеюсь, вы знакомы с виджетами простых лиц, конвейером omnifaces, компонентом бобов … Если нет, я рекомендую вам пройтись по руководству простых лиц.
, Допустим, мы не выбрали ни одного варианта и нажали кнопку «Отправить», javascript
Метод будет проверен, где я проверяю, выбран ли какой-либо параметр или нет, если ничего не выбрано, просто попросив пользователя выбрать любой из параметров.
, Допустим, вы выбрали любой из вариантов, теперь Ajax вызов
вызывает, выбранная опция будет установлена на бэк-компонент и готовит соответствующий URL страницы. После этого (если вы наблюдаете index.xhtml Я добавил текстовое поле, которое не будет отображаться в Интернете. страница) , После завершения вызова ajax это текстовое поле будет обновлено, я имею в виду
это текстовое поле будет иметь выбранную веб-опцию.
, Если вы нажмете на отправить сейчас, снова метод javascript будет
После этого мы берем значение из этого текстового поля, поэтому оно содержит URL опции. Таким образом, URL будет открыт в новом окне.
Изображение://wp-content/uploads/2017/09/primafaces-open-windows-demo5.png[изображение]
Изображение://wp-content/uploads/2017/09/primefaces-open-windows-demo6.png[изображение]
Эксперты Java команда программистов-разработчиков поделились своими лучшими знаниями о технологии Java и ее использовании в проекте Java. Если вам нужно получить больше информации, вы можете спросить разработчиков, которые уже применяют эту технологию в своих проектах.
-
Подробнее об этом: ** ссылка://jpa/jpa-optimistic-lock-exception-in-java-development/[Исключение оптимистической блокировки JPA в разработке Java]В этом посте объясняется технология JPA и ее использование в разработке Java.
Эксперты java development India объясняют пример использования технологий - JPA и Hibernate, база данных MySql, Maven. Прочитайте этот пост и узнайте, что они хотят сказать.
Рекомендации
Java EE]
ссылка://тег/раскрывающийся список/[раскрывающийся список]ссылка://тег/jsf/[jsf]ссылка://тег/primefaces/[primefaces]