In diesem Tutorial werden Primefaces, Maven, Java8, Glasifish-Server verwendet.
-
Anwendungsfall: ** Wenn Sie eine neue Seite öffnen möchten, indem Sie auf die Schaltfläche, den Link oder etwas anderes klicken, ist dies eine direkte Sache. Selbst wenn die Seiten-URL von einem direkt unterstützten Bean aus angesprochen wird, können wir dies tun. Wenn die Seiten-URL dynamisch ist, ist dies jedoch keine einfache Sache, denn wenn Sie auf die Schaltfläche klicken, ist die Seite bereits gerendert, sodass Sie einen alten Wert haben. In diesem Fall werde ich diesen Anwendungsfall implementieren.
Es gibt mehrere Schritte, um dies zu implementieren,
-
Erstellen Sie ein Primefaces-Maven-Projekt, laden Sie glassfish herunter und fügen Sie es hinzu
der Server-Teil von Eclipse.
-
Stellen Sie die Anwendung bereit und testen Sie.
1. Projektstruktur
2. Projektabhängigkeiten
Ich habe gerade Primefaces hinzugefügt, die jsf-Bibliothek.
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. Code
Habe ein Bean, Converter und Enum und index.xhtml (Facelet) erstellt
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, Demo
Erstellen Sie die Anwendung, fügen Sie sie dem Server hinzu und führen Sie die Anwendung aus.
4.1 Wenn Sie die Anwendung ausführen, sieht der Bildschirm folgendermaßen aus:
4.2 Wenn Sie keine Option auswählen, werden Sie aufgefordert, eine Option auszuwählen.
4.3 Im Moment habe ich zwei Seiten Google und Yahoo hinzugefügt. Wenn Sie eine davon auswählen, wird die entsprechende Website in einem anderen Fenster geöffnet.
4.4 Nun werde ich den Trick erklären. Ich hoffe, Sie kennen Primefaces-Widgets, Omnifaces Conveter, Backing Bean … Wenn dies nicht der Fall ist, empfehle ich Ihnen, das Primefibel-Tutorial durchzugehen.
-
Angenommen, Sie haben keine Option ausgewählt und auf Senden, Javascript, geklickt
Die Methode wird geprüft, wo geprüft wird, ob eine Option ausgewählt ist oder nicht.
-
Angenommen, Sie haben eine der Optionen ausgewählt, jetzt einen Ajax-Anruf
aufgerufen wird, bewirkt, dass die ausgewählte Option auf die Hintergrundbohne und gesetzt wird bereitet die jeweilige Seiten-URL vor. Danach (wenn Sie Facelet beobachten, index.xhtml Ich habe ein Textfeld hinzugefügt, das nicht im Web angezeigt wird Seite) . Nach Beendigung eines Ajax-Aufrufs wird dieses Textfeld aktualisiert
Dieses Textfeld enthält die ausgewählte Weboption.
-
Wenn Sie jetzt auf "Senden" klicken, wird wieder die Javascript-Methode verwendet
aufgerufen, dort nehmen wir den Wert aus diesem Textfeld und enthalten daher die URL der Option Die URL wird also in einem neuen Fenster geöffnet.
Experten Java-Entwicklerprogrammierungsteam haben ihr bestes Wissen über Java-Technologie und ihre Verwendung in Java-Projekten geteilt. Wenn Sie weitere Informationen benötigen, können Sie die Entwickler fragen, die diese Technologie bereits in ihren Projekten einsetzen.
-
Lesen Sie mehr Related This: ** JPA-optimistische Sperrenausnahme in Java-Entwicklung In diesem Beitrag wird die JPA-Technologie und ihre Verwendung in der Java-Entwicklung erläutert.
Experten für Java Development India erläutern den Anwendungsfall von Technologien - JPA und Hibernate, MySql-Datenbank, Maven. Lesen Sie diesen Beitrag und wissen Sie, was sie sagen möchten.