宜兴做网站的公司有哪些,wordpress 不显示顶部,做问卷的网站哪个好,网站建设最简单的教程jpa jsfPrimefaces AutoComplete#xff0c;JSF转换器 这篇文章从第一部分和第二部分继续。 JSF拥有Converter工具#xff0c;可以帮助我们从用户视图中获取一些数据并将其转换为从数据库或缓存中加载的对象。 在“ com.converter”包中#xff0c;创建以下类#xff1a;… jpa jsf Primefaces AutoCompleteJSF转换器 这篇文章从第一部分和第二部分继续。 JSF拥有Converter工具可以帮助我们从用户视图中获取一些数据并将其转换为从数据库或缓存中加载的对象。 在“ com.converter”包中创建以下类 package com.converter;import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.*;import com.facade.DogFacade;
import com.model.Dog;FacesConverter(forClass com.model.Dog.class)
public class DogConverter implements Converter {Overridepublic Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {DogFacade dogFacade new DogFacade();int dogId;try {dogId Integer.parseInt(arg2);} catch (NumberFormatException exception) {throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, Type the name of a Dog and select it (or use the dropdow), Type the name of a Dog and select it (or use the dropdow)));}return dogFacade.findDog(dogId);}Overridepublic String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {if (arg2 null) {return ;}Dog dog (Dog) arg2;return String.valueOf(dog.getId());}
} 关于上面的代码 在Converter批注中有一个名为“ forClass”的属性。 此属性向de JSF指示“ forClass”中指定的所有类将调用Converter。 DogConverter带有“ forClass com.model.Dog.class ”注释每次JSF需要一个Dog类的Converter时JSF都会调用DogConverter。 无需在“ web.xml”文件中编写任何代码。 Primefaces自动完成中需要转换器代码。 在下面您会看到使用“自动完成”有多么容易 personUpdateDialog.xhtml 人MB.java 关于上面的代码 自动完成功能具有多个选项例如最小查询长度启动查询的延迟下拉菜单以显示所有值等等。 值得一看的是所有选项 http : //primefaces.org/showcase/ui/autoCompleteBasic.jsf和http://primefaces.org/showcase/ui/autocompleteHome.jsf “ complete ”方法具有在数据库中找到的值的缓存。 该方法转到List Dog的每个对象并保留匹配项。 注意将始终调用Converter因为您将在AutoComplete组件中找到“ itemValue ”{dog}” ”。 您可以看到自动完成功能如下 使用JSFCSS / javascript /图像 看一下下面的图片它将显示该帖子的应用程序如何处理资源 “ master.xhtml ” “ index.xhtml” 使用JSF很容易处理这种资源。 开发人员不再需要使用文件相对路径。 要像这样使用资源请像下面那样创建文件 JSF将映射在“ / WebContent / resources”文件夹中找到的所有资源开发人员将能够使用上面显示的资源。 “ web.xml”配置 在文件夹“ WebContent / WEB-INF / ”中创建以下文件 “ web.xml ” ?xml version1.0?
web-app version3.0 xmlnshttp://java.sun.com/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsddisplay-nameJSFCrudApp/display-nameservletservlet-nameFaces Servlet/servlet-nameservlet-classjavax.faces.webapp.FacesServlet/servlet-classload-on-startup1/load-on-startup/servletservlet-mappingservlet-nameFaces Servlet/servlet-nameurl-pattern*.xhtml/url-pattern/servlet-mappingwelcome-file-listwelcome-file/pages/protected/index.xhtml/welcome-file/welcome-file-listcontext-paramparam-namejavax.faces.PROJECT_STAGE/param-nameparam-valueDevelopment/param-value/context-paramfilterfilter-nameLoginCheckFilter/filter-namefilter-classcom.filter.LoginCheckFilter/filter-classinit-paramparam-nameloginActionURI/param-nameparam-value/JSFCrudApp/pages/public/login.xhtml/param-value/init-param/filterfilter-mappingfilter-nameLoginCheckFilter/filter-nameurl-pattern/*/url-pattern/filter-mappingfilterfilter-nameAdminPagesFilter/filter-namefilter-classcom.filter.AdminPagesFilter/filter-class/filterfilter-mappingfilter-nameAdminPagesFilter/filter-nameurl-pattern/pages/protected/admin/*/url-pattern/filter-mappingfilterfilter-nameDefaultUserPagesFilter/filter-namefilter-classcom.filter.DefaultUserPagesFilter/filter-class/filterfilter-mappingfilter-nameDefaultUserPagesFilter/filter-nameurl-pattern/pages/protected/defaultUser/*/url-pattern/filter-mapping
/web-app “ faces-config.xml ” ?xml version1.0 encodingUTF-8?faces-config xmlnshttp://java.sun.com/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsdversion2.0applicationresource-bundlebase-namemessages/base-namevarbundle/var/resource-bundlemessage-bundlemessages/message-bundle/application
/faces-config 关于上面的代码 您会在web.xml文件中找到所有映射的安全过滤器。 您也可以使用Filter注释它们的工作原理相同。 属性“ javax.faces.PROJECT_STAGE ”的值为DEVELOPMENT。 这种配置的优点之一是如果在屏幕中未找到“ hmessage”则JSF将附加“ hmessage”。 如果发生某些异常并且没有任何可显示的组件JSF将在页面中附加ahmessage组件。 在“ faces-config”内部存在一个名为“ message-bundle”的标签。 此标记允许开发人员覆盖JSF默认消息此标记的值将指向具有默认JSF消息键的文件。 在“ message.properties”文件第08页中键为“ javax.faces.component.UIInput.REQUIRED ”您在此键中写入的任何值都会影响应用程序中显示的所有“必填字段”消息。 增强应用程序的安全性 不要串联查询 不要使用通常的“ where id ” id sql代码。 这种代码允许“ SQL Injection ”黑客攻击。 使用ORM的开发人员也容易受到这种攻击但使用不同的名称“ HQL注入”。 您可以在Person和User类中找到最佳查询方法 是否使用JPA无关紧要不要将查询与字符串连接在一起。 开发人员必须意识到“ SQL注入可能在您的应用程序的任何查询中发生 ”而不仅仅是登录查询中。 如果用户对您的应用程序具有有效的登录名则该用户可以在所有查询中执行“ SQL注入 ”。 自动完成关闭 在“ login.xhtml ”页面中有以下代码 标记为“自动完成”的关闭会告诉浏览器不应保存此字段。 优秀的浏览器FirefoxChromeIE会尊重此标记它有助于保护您的应用程序。 如果允许浏览器保留密码则浏览器必须将此密码存储在某个位置。 如果黑客发现了该密钥的存储位置他可能会尝试将其破解。 验证所有传入请求 如果仅要求应用程序验证用户是否已登录则用户类将不需要角色Enum。 如果没有角色验证则普通用户可以访问系统的任何区域例如管理页面。 请注意此应用程序具有始终用于验证所有请求的用户角色的过滤器。 “ 隐藏链接不是保护措施。 开发人员应始终验证所有传入请求 ”。 开发人员可以隐藏URL或按钮但是如果用户在浏览器中键入URL或模拟get / post调用则用户可以访问应用程序的任何屏幕。 始终使用houtputText组件 避免跨站点脚本编写的一种简单方法是使用houtputText组件显示数据库中的数据。 请注意在这篇文章中显示给de user的所有来自数据库的值都使用houtputText组件。 可以避免使用houtputText组件的情况是应用程序将显示“ message.properties”之类的文件中的系统消息。 运行应用程序 启动Tomcat并检查数据库 请注意数据库中还没有表。 在浏览器中键入以下URL http// localhost / JSFCrudApp / 。 将显示以下屏幕 键入所需的任何值然后按登录按钮如果没有用户或表请不要打扰。 只需单击它。 您将看到以下错误消息 再次检查数据库您将看到所有表都已创建。 应用程序手动控制所有事务这是JPA / Hibernate在首次调用时才创建表的原因。 您需要创建一个角色为ADMIN的用户我将该用户命名为Real Madrid以及另一个角色为USER的用户我将其命名为Barcelona。 ADMIN用户将有权访问所有文件夹下的所有系统但具有USER角色的用户将有权访问文件夹defaultUser下的页面。 如果使用ADMIN用户登录您将看到 现在以具有USER角色的用户身份登录 狗按钮被隐藏。 即使没有该按钮用户也可以访问Dogs的URL并且只允许ADMIN角色使用Dogs屏幕。 要查看应用程序的行为和非法访问的行为请保持使用USER角色的身份登录并尝试访问以下链接 http//localhost/JSFCrudApp/pages/protected/admin/adminIndex.xhtml 将显示下一个屏幕 将显示此屏幕因为AdminPagesFilter检查请求是否来自ADMIN用户。 如果用户不是ADMIN角色我们的忍者猫就会得到它 [ 参考在uaiHebert博客上来自我们的JCG合作伙伴 Hebert Coelho的Tomcat JSF Primefaces JPA Hibernate完整Web应用程序 。 翻译自: https://www.javacodegeeks.com/2012/07/full-web-application-tomcat-jsf_4954.htmljpa jsf