普通html标签如何调用jsf方法或与backbean绑定

html-css018

普通html标签如何调用jsf方法或与backbean绑定,第1张

猪哥解答:

补充:如果你不是用ajax技术,不会Facelets ,也不会自己客制底层的类似process的实现,那么JSF只有在JSP页面下才可以使用,离开JSP根本就用不了,如果你非要在纯HTML调用JSF的方法,通过ajax访问中转jsp页面或servlet等服务是最好的方式,如果不会用,那你就在HTML页面里加一个跳转动作,跳转到一个跟它长的一摸一样的jsp里做JSF的绑定处理。因为JSF标签只能在JSP里面使用。

html是静态页面,执行端在客户也就是前台,backbean是java类,部署在服务器上,是后台服务器端。

想在静态html页面调用服务器上的类的方法,目前推荐使用的是Ajax技术,当然你也可以自己研究底层通讯技术写一些封装html标签,例如很早之前的Process技术,以及被大部分人遗忘的applet技术等等。

最简单、方便可行、不需要提交页面也就可以调用backbean的方式还是用Ajax吧。

如果你对Ajax没有研究,推荐你使用JQuery封装好的Ajax来实现普通html中调用服务器类的方法,上手比较容易。

开发基于Java技术的Web用户界面一直存在着开发难度较大 效率较低的问题 Sun公司提出的一种新标准框架Java Server Faces (JSF) 可以很好地解决上述问题 在第三方RAD开发工具支持下 可以实现Web应用实例的可视化开发 本文详细讨论了如何利用JSF 开发Web用户界面 最后分析了JSF 技术的优缺点及其应用前景

与微软Visual Studio NET程序开发有可视化工具的支持相比 人们在开发基于Java的Web用户界面时仍然需要手工书写大量的标签 同时还要考虑页面状态信息的保存 客户端事件处理等问题 开发难度比较大 效率较低 重用性差 Java Server Faces (JSF) 技术正是为了解决这一问题应运而生的 其最引人注目的特性之一是它与标记语言 协议 客户端设备无关 利用JSF提供的可重用 可扩展 基于组件的用户界面框架 在快速开发工具RAD的支持下实现可视化开发 现在JSF技术已经得到了许多大厂商的支持 如SUN公司的JSF Web UI IBM公司的JSF extension以及Oracle的 ADF Faces等 许多开源项目(典型的Apache Myfaces)也提供对JSF技术的支持 同时Oracle Sun Borland和IBM等公司都为JSF提供了开发环境

传统JSP开发存在的问题

实现表示层和业务层的分离 这是J EE Web应用一直以来的理想 可惜JSP 并没有真正实现这个目标 JSP是一个基于Java的Web用户界面开发标准技术 是一种 脚本式 开发的Web技术 在JSP 页面中混淆了大量用于显示逻辑的HTML 和用于业务逻辑的Java 代码 使得页面设计与程序开发无法分离JSP另一个更大的缺陷是脚本不能重用 这常常导致开发者不得不在JSP页面之间进行复制 粘贴操作 进而导致同一段代码出现多个版本 从而使得程序的调试和设计极其错综复杂 而标签库TagLib作为JSP的补充 将Java代码从JSP中剥离 也只是有限地实现了表现与逻辑的分离 始终没有摆脱代码和HTML页面揉和的问题 此外 JSP还存在着其他固有的缺陷 例如对应Servlet编译的出错信息很难在JSP 中找到准确的出错位置 由此给调试带来很大困难

JSF技术介绍

在Sun公司提出的J EE(Java Enterprise Edition)平台上 Java Server Faces (JSF) 是一种用于构建Web应用程序的新标准Java框架[ ] 它提供了一种以组件为中心来开发Java Web用户界面的方法 从而简化了开发 企业开发人员 和Web设计人员将发现JSF开发可以简单到只需将用户界面 (UI) 组件拖放到页面上 而 系统开发人员 将发现丰富而强健的JSF API为他们提供了无与伦比的功能和编程灵活性 JSF还通过将良好构建的模型 视图 控制器 (MVC)设计模式集成到它的体系结构中 确保了应用程序具有更高的可维护性

JSF是由Java Community Process (JCP)制定的一个Web应用框架标准 JSF具有良好定义的请求处理生命周期和丰富的组件层次结构 旨在推动基于Java的Web用户界面开发的简易性 利用JSF提供的可重用 可扩展 基于组件的用户界面框架 在快速开发工具RAD的支持下 可以通过拖放组件的方式对Web用户界面进行可视化编辑 将用户界面上的组件与一个数据源绑定 并将客户端用户界面产生的事件交给服务器端处理 从而大大降低基于Java的Web用户界面的开发难度 提高开发效率

Java Server Faces技术包括两个主要部分

( ) 一组用于表示用户界面组件并管理其状态 处理事件和验证输入的JavaAPI 这些API支持国际化和可访问性(accessibility)

( ) 一个用于在JSP页面中表示JSF 组件的自定义标签库

简而言之 JSF的主要部分是一个GUI组件框架和一个用于跨不同标记语言或客户端设备描述组件的灵活模型 JSF GUI组件框架使开发人员能够创建JSF应用程序的用户界面 JSF GUI组件包括标准的HTML表单控件(如按钮) 布局组件 以及更复杂的组件 如数据表 此外 第三方还可以扩展规范中定义的基本类 来开发额外的GUI组件

JSF 组件的体系结构是这样设计的 组件的功能由组件类定义 组件的呈现由一个单独的呈现器(renderer)定义 呈现器定义了组件类如何映射为适合特定客户的组件标签 JSF 参考实现中包含了一个标准的RenderKit 用于生成基于HTML 的标记 实现将组件类呈现给HTML客户

lishixinzhi/Article/program/Java/hx/201311/25609

使用jsf加myfaces的upload插件实现上传文件的功能

需要的jar包:tomahawk-1.1.6.jar,jsf-impl.jar,commons-fileupload-1.2.jar,commons-io-1.3.2.jar,commons-el-1.0.jar

程序:

package model.map

import control.MapMDelegate

import java.io.BufferedInputStream

import java.io.FileOutputStream

import java.io.IOException

import java.io.InputStream

import java.text.SimpleDateFormat

import java.util.Date

import java.util.Random

import javax.faces.application.FacesMessage

import javax.faces.context.FacesContext

import org.apache.myfaces.custom.fileupload.UploadedFile

public class FileUploadForm {

public FileUploadForm() {

}

private String name

private UploadedFile upFile

public void setName(String name) {

this.name = name

}

public String getName() {

return name

}

public void setUpFile(UploadedFile upFile) {

this.upFile = upFile

}

public UploadedFile getUpFile() {

return upFile

}

public String upload() throws IOException {

try {

InputStream in = new BufferedInputStream(upFile.getInputStream())

try {

byte[] buffer = new byte[(int)upFile.getSize()]

Date now = new Date()

SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmmss")

String dt2 = sdf2.format(now)

//取得后缀名

String name = upFile.getName()

int l = name.lastIndexOf(".")

name = name.substring(l)

//生成2位随机数

Random random = new Random()

String sRand=""

String rand = null

for (int count=0count<2count++){

rand=String.valueOf(random.nextInt(10))

sRand+=rand

}

//生成在服务器端保存的文件名

String saveName = dt2 + sRand + name

this.setName(saveName)

String trace = D:\\"+ saveName//本地测试

FileOutputStream fileOutputStream =

new FileOutputStream(trace)//这里可以把上传的文件写服务器目录,或者数据库中 ,或者赋值给name用于文件名显示

while (in.read(buffer) >0) {

fileOutputStream.write(buffer)

}

} catch (Exception x) {

System.out.print("Exception")

FacesMessage message =

new FacesMessage(FacesMessage.SEVERITY_FATAL,

x.getClass().getName(), x.getMessage())

FacesContext.getCurrentInstance().addMessage(null, message)

return null

}

finally {

in.close()

FacesContext facesContext = FacesContext.getCurrentInstance()

facesContext.getExternalContext().getApplicationMap().put("fileupload_bytes",

upFile.getBytes())

facesContext.getExternalContext().getApplicationMap().put("fileupload_type",

upFile.getContentType())

}

System.out.println("End")

return "OK"

} catch (Exception x) {

System.out.print("Exception")

FacesMessage message =

new FacesMessage(FacesMessage.SEVERITY_FATAL,

x.getClass().getName(), x.getMessage())

FacesContext.getCurrentInstance().addMessage(null, message)

return null

}

}

public boolean isUploaded() {

FacesContext facesContext = FacesContext.getCurrentInstance()

return facesContext.getExternalContext().getApplicationMap().get("fileupload_bytes") !=

null

}

}

页面:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<%@ page contentType="text/htmlcharset=GBK"%>

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>

<%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%>

<f:view>

<html>

<head>

<meta http-equiv="Content-Type" content="text/htmlcharset=GB18030"/>

<title>add-map</title>

</head>

<body>

<h:outputText value="#{MapMDelegate.msg}" style="color:rgb(255,0,0)"/>

<h:form enctype="multipart/form-data">

<t:inputFileUpload value="#{fileuploadForm.upFile}"/>

<br/>

<h:message for="fileupload"/><h:commandButton value="上传"

action="#{fileuploadForm.upload}" />

</h:form>

<h:form>

<br/>

图纸名称 <h:inputText value="#{fileuploadForm.name}" disabled="true"/>

</h:form>

</body>

</html>

</f:view>

记得要在工程的web.xml文件中加入filter

<!--Tomahawk-->

<filter>

<filter-name>extensionsFilter</filter-name>

<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>

<init-param>

<description>Set the size limit for uploaded files.

Format: 10 - 10 bytes

10k - 10 KB

10m - 10 MB

1g - 1 GB</description>

<param-name>uploadMaxFileSize</param-name>

<param-value>10m</param-value>

</init-param>

<init-param>

<description>Set the threshold size - files

below this limit are stored in memory, files above

this limit are stored on disk.

Format: 10 - 10 bytes

10k - 10 KB

10m - 10 MB

1g - 1 GB</description>

<param-name>uploadThresholdSize</param-name>

<param-value>1k</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>extensionsFilter</filter-name>

<url-pattern>/faces/*</url-pattern>

</filter-mapping>

还有把你的程序设置成request哦

<managed-bean>

<managed-bean-name>fileuploadForm</managed-bean-name>

<managed-bean-class>model.map.FileUploadForm</managed-bean-class>

<managed-bean-scope>request</managed-bean-scope>

</managed-bean>