jpa jsf_完整的Web应用程序Tomcat JSF Primefaces JPA Hibernate –第3部分

jpa jsf

Primefaces AutoComplete,JSF转换器

这篇文章从第一部分和第二部分继续。

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 version='1.0'?>
<web-app version='3.0' xmlns='http://java.sun.com/xml/ns/javaee'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xsi:schemaLocation='http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd'><display-name>JSFCrudApp</display-name><servlet><servlet-name>Faces Servlet</servlet-name><servlet-class>javax.faces.webapp.FacesServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>Faces Servlet</servlet-name><url-pattern>*.xhtml</url-pattern></servlet-mapping><welcome-file-list><welcome-file>/pages/protected/index.xhtml</welcome-file></welcome-file-list><context-param><param-name>javax.faces.PROJECT_STAGE</param-name><param-value>Development</param-value></context-param><filter><filter-name>LoginCheckFilter</filter-name><filter-class>com.filter.LoginCheckFilter</filter-class><init-param><param-name>loginActionURI</param-name><param-value>/JSFCrudApp/pages/public/login.xhtml</param-value></init-param></filter><filter-mapping><filter-name>LoginCheckFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter><filter-name>AdminPagesFilter</filter-name><filter-class>com.filter.AdminPagesFilter</filter-class></filter><filter-mapping><filter-name>AdminPagesFilter</filter-name><url-pattern>/pages/protected/admin/*</url-pattern></filter-mapping><filter><filter-name>DefaultUserPagesFilter</filter-name><filter-class>com.filter.DefaultUserPagesFilter</filter-class></filter><filter-mapping><filter-name>DefaultUserPagesFilter</filter-name><url-pattern>/pages/protected/defaultUser/*</url-pattern></filter-mapping> 
</web-app>

faces-config.xml

<?xml version='1.0' encoding='UTF-8'?><faces-config xmlns='http://java.sun.com/xml/ns/javaee'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xsi:schemaLocation='http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd'version='2.0'><application><resource-bundle><base-name>messages</base-name><var>bundle</var></resource-bundle><message-bundle>messages</message-bundle></application>
</faces-config>

关于上面的代码:

  • 您会在web.xml文件中找到所有映射的安全过滤器。 您也可以使用@Filter注释,它们的工作原理相同。
  • 属性“ javax.faces.PROJECT_STAGE ”的值为DEVELOPMENT。 这种配置的优点之一是,如果在屏幕中未找到“ h:message”,则JSF将附加“ h:message”。 如果发生某些异常并且没有任何可显示的组件,JSF将在页面中附加ah:message组件。
  • 在“ 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 ”页面中,有以下代码:

标记为“自动完成”的关闭会告诉浏览器不应保存此字段。 优秀的浏览器(Firefox,Chrome,IE)会尊重此标记,它有助于保护您的应用程序。

如果允许浏览器保留密码,则浏览器必须将此密码存储在某个位置。 如果黑客发现了该密钥的存储位置,他可能会尝试将其破解。

验证所有传入请求

如果仅要求应用程序验证用户是否已登录,则用户类将不需要角色Enum。

如果没有角色验证,则普通用户可以访问系统的任何区域,例如管理页面。 请注意,此应用程序具有始终用于验证所有请求的用户角色的过滤器。 “ 隐藏链接不是保护措施。 开发人员应始终验证所有传入请求 ”。 开发人员可以隐藏URL或按钮,但是如果用户在浏览器中键入URL或模拟get / post调用,则用户可以访问应用程序的任何屏幕。

始终使用h:outputText组件

避免跨站点脚本编写的一种简单方法是使用h:outputText组件显示数据库中的数据。 请注意,在这篇文章中,显示给de user的所有来自数据库的值都使用h:outputText组件。 可以避免使用h:outputText组件的情况是,应用程序将显示“ 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.html

jpa jsf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

会话保持 (转)

http://www.cnblogs.com/kellyseeme/p/7599061.html 理论部分 会话也就是session&#xff0c;主要存储在服务器端&#xff0c;用来识别用户的身份。 在浏览器中向服务端发送请求的时候&#xff0c;不是http协议就是https协议&#xff0c;而两种协议在发送请求的时候&#xff0c…

html url js编码顺序,前端url编码

为什么要编码&#xff1a;Http协议中参数的传输是"keyvalue"这种简直对形式的&#xff0c;如果要传多个参数就需要用“&”符号对键值对进行分割如"?name1value1&name2value2"&#xff0c;这样在服务端在收到这种字符串的时候&#xff0c;会用“&a…

AWS SQS和Spring JMS集成

Amazon WEB服务为我们提供了SQS消息传递服务。 sqs的java sdk与JMS兼容。 因此&#xff0c;可以将SQS与spring提供的JMS集成框架集成在一起&#xff0c;而不是将SQS用作简单的spring bean。 我将使用spring-boot和gradle。 gradle文件&#xff1a; group com.gkatzioura.sq…

手势相关-解决手势冲突

解决UITableview点击事件与手势的冲突 1.签手势代理 <UIGestureRecognizerDelegate> 2.是tableview点击事件则屏蔽手势 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if ([touch.view isKindOfClass:[UIS…

html动画用css还是js,javascript与css3动画结合使用小结

当Html5,css3已渐渐成为主流的时候&#xff0c;我还非常习惯的用js去做一些简单的动画。因为在桌面浏览器上&#xff0c; 并非所有的都支持css3。用户也倒是很奇怪&#xff0c;用户习惯并不是每个用户都可以被培养。总有不少人会觉得win7.win8没xp好用。但手机方面就大不一样了…

洛谷 P3146 [USACO16OPEN]248

P3146 [USACO16OPEN]248 题目描述 Bessie likes downloading games to play on her cell phone, even though she doesfind the small touch screen rather cumbersome to use with her large hooves. She is particularly intrigued by the current game she is playing.The g…

java将HTML文件转化为pdf文件,如何使用Java将HTML网页转换为PDF文件

我一直在互联网上搜索如何使用Java将HTML页面转换为PDF文件。我发现了很多指针&#xff0c;简而言之&#xff0c;它们不起作用或难以实现。我也下载了一个商业产品&#xff0c;pdf4ml;该API是我很乐意与之合作的&#xff0c;除了当我在维基百科上检索一个简单的页面时&#xff…

java抽象类和模板模式_测试抽象类和模板方法模式

java抽象类和模板模式摘自Wikipedia&#xff0c;“模板方法定义了算法的程序框架。 子类可以覆盖一个或多个算法步骤&#xff0c;以允许不同的行为&#xff0c;同时确保仍然遵循总体算法。” 通常&#xff0c;此模式由两个或多个类组成&#xff0c;一个是提供模板方法&#xff…

第三章 使用单元测试测试简单的首页

3.1第一个Django应用&#xff0c;第一个单元测试 python3 manage.py startapp lists 创建一个应用 功能测试站在用户的角度从外部测试应用&#xff0c;而单元测试从程序员的角度从内部测试应用 3.2Django中的单元测试 打开新生成的的文件lists/tests.py 注&#xff1a;单元测试…

微型计算机应用领域及应用,自考“微型计算机应用基础”自考大纲(1)

I. 课程性质微型计算机应用基础是高等教育自学考试经济管理类各专业的一门必修的应用基础课程&#xff0c;同时它也适用于文、法、医、农各专业选修。了解计算机这一现代化工具的性能、特点和一般工作原理&#xff0c;掌握计算机基础知识&#xff0c;学会计算机的基本操作&…

Lambda的Lambda(如果可选)

因此&#xff0c;我对JDK 8中Optional接口的两个限制感到沮丧。第一个问题是&#xff0c;没有明显的方法可以在块中执行else操作&#xff0c;因为只有isPresent方法&#xff0c;除非您使用的是老式的if语句。 第二个问题当然是古老的板栗&#xff0c;即使您能够做到&#xff0c…

win7链接html线到屏幕上,为你解决win7系统html文件图标变成空白的具体技巧 - win7吧...

我们经常在电脑上安装应用软件&#xff0c;难免会遇到诸如win7系统html文件图标变成空白的状况&#xff0c;对于大多电脑用户而言&#xff0c;大家几乎都是首次看到win7系统html文件图标变成空白这种状况&#xff0c;其实小编的经验是碰到win7系统html文件图标变成空白的问题别…

周赛。。。。

分糖果 分糖果 题意 要篮子里有不少于 n 块糖果&#xff0c;幼儿园的所有 n 个小朋友&#xff08;包括你自己&#xff09;都从篮子中拿走恰好一块糖&#xff0c;直到篮子里的糖数量少于 n 块。此时篮子里剩余的糖果均归你所有——这些糖果是作为你搬糖果的奖励。 思路 这个程…

计算机科学之前说,国内计算机科学十强大学是哪些?前2名没悬念,后面几所都不好说...

随着科技的发展、产业结构的不断优化&#xff0c;许多单位对计算机相关专业人才需求量越来越大&#xff0c;计算机专业毕业生就业情况普遍不差。加上计算机学科本身就给人一种“格局很高”的感觉&#xff0c;所以该专业成为了当下最热门的专业之一&#xff0c;每年高考都会有一…

服务引用代理类_在代理类中引用动态代理

服务引用代理类在Stackoverflow中有一个有趣的问题 &#xff0c;关于Spring Bean如何获​​得对由Spring创建的代理的引用以处理事务&#xff0c;Spring AOP&#xff0c;缓存&#xff0c;异步流等。需要对代理的引用&#xff0c;因为如果存在对自身的调用通过代理bean&#xff…

HTML中confirm替换,Javascript直接Confirm()函数替换

我想替换Javascript Confirm()函数以允许自定义按钮,而不是Yes / Cancel.我尝试搜索,但是所有解决方案都是事件驱动的,例如jquery对话框(其中代码不等待响应,而是事件驱动的).有谁知道非事件驱动的解决方案.它必须在Safari和IE中都可以使用(因此没有vbscript).这是系统许多部分…

关于windows防火墙关不掉解决办法

建立一个.bat文件&#xff0c;写以下内容: echo off title 正在启动防火墙服务 sc config MpsSvc startauto net start MpsSvc pause 至此完毕&#xff0c;重启试试就知道了 转载于:https://www.cnblogs.com/ciscolee/p/7616588.html

Java中特质模式的定义

在本文中&#xff0c;我将介绍特征的概念&#xff0c;并为您提供一个如何在Java中使用它们以在对象设计中减少冗余的具体示例。 我将首先提出一个虚构的案例&#xff0c;其中可以使用特征来减少重复&#xff0c;然后以使用Java 8的特征模式示例实现为结尾。 假设您正在开发留言…

计算机 注册表 远程桌面,仅允许运行使用网络级别身份验证的远程桌面计算机连接失败处理方法(远程桌面连接)...

计算机在开启远程桌面的时候选中了“仅允许运行使用网络级别身份验证的远程桌面计算机连接”&#xff0c;于是连接时提示错误如下&#xff1a;远程计算机需要网络级别身份验证&#xff0c;而您的计算机不支持该验证&#xff0c;请联系您的系统管理员或者技术人员来获得帮助解决…

前端笔记----定位

一.定位分三种&#xff1a;相对定位&#xff0c;绝对定位和固定定位。 1.相对定位&#xff1a;元素所占据的文档流的位置保留&#xff0c;元素本身相对自身原位置进行偏移&#xff1b; 如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head>&l…