




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十四章开发JSF应 前 介 系统需 快速创建oJSF项 创建消息 创建受管 创建JSP页 添加导航规 运行应用程 和导航机 位于ManagedBean中的处理方 基于导航规则令按钮 简 JSF+JPA的MyEclipseBlog实 小 参考资 开发日益着框架林立,开发工具笨拙,思路独特的限制。然而,Sun公司的工程师们希望能把基于Swing的开发模式应用到Web中去,让这些的Java程序员不用了解什么HTMLHTTP也能工作。这很大程度上是因为微软的.NETWebForm给人留下的深刻CSSJavaScriptVisualStudio中的页面设计器,拖放几个控件到页面上,设置下属性,编写以下处理代码,就搞定了。因此,Sun希望在JavaEE5规范的一部分,所有要开发服务器的厂商都必须支持它。Java世界的向心力总是不如微软那样强,大家各自打自己的算盘,标准化和框架更新换代飞快,APIJSF又重新回到新的规范正在制定当中,也就是第三代Web框架:基于标注的模式和基于组件的前台分:面向开发工具制造商的部分(JSF的底层实现,组件库,以及配套开发工具)和JSFAPI不变的方式下进行性能等JSF进行扩展,而使用者却不需要关心底层的实现,它只需要按照JSF进行细致入微的介绍,我们只需要关注一下对开发人员带来Request,Response这些东西,而把注意力转移到业务类和表示层上去。另外,第二个是服务器端驱动的编程模式。例如:<buttononclick=”alert(‘o’)”>,点击按钮后会弹出Struts(Struts2)里面所无法很轻松就能实现的,因为首先JSF都已经做好了(JSF的框架开发人员必须变就是您可以使用可视化的设计器进行开发,就像.NETVisualStudio开发工具一样。像更重要的是这些功能都是做好的,无须自己从头开始。而且,JSF目前也提供了大量支持AJAX的组件和库。在厂商的支持上,JSFJavaEEOracle,ApusicOperaMasks。开发工具上,则有众多的选择(大部分都是免费JSF开发的截屏。相比较而言,MyEclipseJSF开发功能则相对较弱,14.1JSFNetbeans例的尤其擅长AJAX功能,读者可以自己根据实际情况进行抉择。JSF框架的目前市场占有率并不是特别的高,因此在本章呢,也不打算特别深入Struts2有很相似的地方。实际上,JSFStruts1Struts2都有很多相似的概念。当然,读者可以完全在没有接触过Struts的情况下学习JSF。MyEclipse6.0TomcatWeb服务MyEclipseWebStruts2类库和配置文件。现在我们来创建一个名为oJSFWebFileNewWeb中输入oJSFJ2EESpecificationLevelJavaEE5.0单选钮,最后点击Finish按钮就可以创建好这个Web项目了。注意:JSFJSTL类库搭配,所以在项目创建时如果您选J2EE1.4AddJSTLlibrariestoWEB-INF/libfolder?,并选中JSTL1.1单选钮。当然,您也可以在以后再来添加JSTL类库,通过选择菜单项MyEclipse>ProjectCapabilities>AddJSTLLibraries...来完成。WebJSFPackageExplorer视图的项目根节点上,选择弹出菜单中的MyEclipse>AddJSFCapabilities;也可以通过选择菜单MyEclipse>ProjectCapabilities>AddJSFCapabilities...来启动AddJSFCapabilities向导,如图14.2所示。JSF框的默认变配置。图中默认的JSF实现是JavaEE5.0Sun公司的版本,不支持Facelets。框中的JSFconfigpath指定了JSF配置文件的位置,而Facesservletname则指定了JSF的Servlet的名字,URLpattern制定了JSFServlet的默认的URL类型的名字为*.facesAddJSFFaceletssupport,那么就可以点击Next按钮进入下一页设置Facelets。14.2添加JSF功能向导图14.3添加完JSF功能的项
结构将如图14.3成其它类型的JSF实现,例如MyFaces,而不必修改配置文件,这和Struts等其它框架是相似的,都有核<?xmlversion='1.0'<?xmlversion='1.0'encoding='UTF- <?<?xmlversion="1.0"encoding="UTF-<web-appxmlns="h" <<<MessageBundle文件,这是一个简单的属性文件,它将保存所有的消息字符JSP文件中来让我们的应用很容ApplicationRpertiesperties文件,以及不同的<bean:message/>,或者<s:text>,就可以在页面中根据消息包来显示的提示信息。在JSF页面里面,我们可以在JSP页面里加入一行代码来加载消息包:名'bundle'来进行,可以用来查找消息主键,然后返回对应的消息值。另外,JSF可以击项目的src,在弹出的菜单中选择New>File,在文件新建框的。同样的我们还需要一份中文的消息文件内容,具体制作方法可以参考12.3.3使用图14.4创建消息资源文现在我们的MessageBundle创建完毕了,接下来我们要创建受管Struts2中的Action类很相似。简单的检查用户名和是否都为"myeclipse",然后将用户重新指引到登录成功的userLoginSuccess.jsp页面,如果登录失败就返回到输入页面。MyEclipseJSFCofnigEditorfaces-config.xml,用鼠标双击此文件即可打开。在工具箱(Palette)上,我们可以点击按钮创建各种元素,包括创建和管理应用程序流程(NavigationCase)。而在画布上点击右键,则可以看到快捷UndoTextChangeRedoTextChangeAddNavigationRuleExportImage导出为。点击底部的Design/Source则可以在设计视图和源代码视图(源代码是XML格式型的组件,或者来使用向导编辑存在的组件,如图14.6左侧图所示;另式就是点击的框来创建所需要的元素,如图14.6右侧图所示。14.6OutlineManagedBeanJavacode(Java代码)Generatemissionggetters/settersforproperties(生成缺列表中添加,删除和修改Bean的属性,最后还能生成对应的代码。14.7ManagedBean点击Add...按钮后将会弹出添加属性的框,一共有两页,如图14.8所示。第一页可以Propert,DescriptionPropertyValueJSF具有简单14.7Next按钮进行第二页的设置,这Finish按钮就可以创建我们需要的JavaBean以及会自动修改相关的配置文件。图14.8添加属性的14.9UserBean.java源文件也在Java编辑器中打开了,其源代码如下所示packagepackage类似于ActionpublicfinalclassUserBeanextendsObjectpublicStringlogin(){return}return}privateStringprivateStringpublicStringgetUserName()return}publicvoidsetUserName(StringuserName)this.userName=}publicStringgetPassword()return}publicvoidsetPassword(Stringpassword)this.password=}}Struts2一样,JSFPOJO的普通Java类模式的开发,所以一个受管Bean中除了属性之外,还可以加入任意多个业务功能定义,例如:publicStringActionForward。UserBeanJSFJavaBeanStruts的StrutsFormStrutsAction的所有功能,方便的合并在一个类中;Struts2ActionStruts的不同之处是这些方法没有返回任配置完成的。在后面章节展示如何创建并配置导航规则。2JSP页面,一个用来提示用户来输入登录用户们和,另一个用来告诉用户登录成功。我们把这两个页面分别命名为userLogin.jsp和userLoginSuccess.jsp。为了简化过程,如果用户尝试登录的时候验证失败,就将带的验证机制,不过你可以很容易的为JSF的inputText/Secret组件添加验证器(alidator箱中点击一下JSP按钮,然后再点击到画布上,或者拖住按钮然后放到画布上。当新建JSP页面向导框弹出时,根据图14.10的提示在FileName(文件名)输入框中输入值userLogin.jsp并选择创建JSP页面的模板为DefaultJSFtemte。同样再重复一次这JSPuserLoginSuccess.jsp(JSF模板。随后就可以看到这两个JSP页面作为图标的形式显示在了画布上。14.10faces-config.xml现在我们faces- <?<?xmlversion='1.0'encoding='UTF-<faces-config " userLogin.jspJSF画布上双击PackageExplorer视图的WebRootJSF编辑器打开页面,如14.11Palette(工具箱)上,我们可以展开各个,看到对应的组件(或者说控件,页面元素,自定义等,点击后即可放到页面,然后即可添加到页面并可以在开发有关的两个是JSFCoreJSFHTMLPalette是折叠的,点给password属性添加一个h:inputSecret组件(框给username的inputText添加一个h:outputLabel来输出消息包中的欢 接着页面中的ThisismyJSFJSPpage.这句生成的代码删除掉。现在请单击展点中不放拖到页面设计视图中松开鼠标,即可将加载消息资源的JSF加入到页面中,14.12Var定义了这个消息包的别名,可以在页面的后面进行,Basename则是在第.properties个包下面,对应的则应该是com.xxxx.Messages,此时完整的代码如下所示:<MyEclipse自动弹出的标记的完成提示,选14.13JSFbundle.后,稍等片刻,它就能列出对应的属性文件中的JSF编辑器在多方面都提供了完成提示,读者可以慢:如果写作value=”:”,那么这样是可以直接输出值的。如果不想这段代码的话,可以在Patette的JSFHTML一栏下可以找到对应的按钮:可以获得同样的一段JSP。
接着光标放在表单中,然后给用户名添加一个文本输入框,点击点击在Patette的JSFHTML一栏下的即可加入此可以通过在Properties视图的QuickEdit中编辑其属性。在ID:右侧的输入框中输入userName,在Value:右侧输入框中输中编辑其属性。在ID:右侧的输入框中输入password,在Value:右侧输入框中输入值#{UserBean.password},如前所述,这将把输入框的值和的受管Bean:UserBeanpassword属性关联起来。当然,我们也可以直接键入,最后得到的代码如下所示"接着我们在登录输入框前加入一点提示,同样的点击在Patette的JSFHTML一栏下的,具体的设置就是每个Label要对应一个输入框,如下所示:。的取值是从资源文件里的信息,当然也可以设置静态值,for指定了这个所对应的控件的id。其实这是和HTML里面的label的用法是很相似的。可以执行受管Bean中的任意的不带参数的返回值为字符串的方法,还可以加入器(一个组件可能产生多种,例如树把页面中的组件作为一个Java对象来使用。我们先来看最简单的设置。将光标放在</h:form>PatetteJSFHTML一栏以设置的属性,我们按照图14.14来进行设置即可。图14.14JSF令按钮属性按钮的标识(名字显示的文字(可以动态和静态字符串的方法按钮的标识(名字显示的文字(可以动态和静态字符串的方法:publicStringlogin();也可以是示例动作器,需要编写一示例器<mandButtonid="submit"type="submit"action="#{UserBean.login}"value=" register()<%@pagelanguage="java"<%@taglib /jsf/html"<%@pagelanguage="java"<%@taglib /jsf/html"prefix="h"<%@taglib /jsf/core"prefix="f"Stringpath=request.getContextPath();StringbasePath=<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01<base<h:outputText<h:form<h:outputLabelfor="userName"<h:inputTextid="userName" :<h:inputSecretid="password" mandButtonid="submit"type="submit"action="#{UserBean.login}"value="登录">< 。<%@pagelanguage<%@pagelanguage="java"<%@taglib /jsf/html"prefix="h"<%@taglib /jsf/core"prefix="f"Stringpath=request.getContextPath();StringbasePath=<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01<base你好<h:outputText NavigationCase(导航规则到userLoginSuccess.jsp这个页面的过程给一个别名为success,以后在应用中它就可以了。现在页面已经创建完毕,我们要做的就是把他们用正确的导航规则(NavigationCase)连接到一块,这个可以通过可视化的修改faces-config.xml文件来完成,所以先要打NavigationCaseuserLogin.jsp14.15创建导航规则的鼠标操作接着会弹出创建导航规则的框,如图14.16所示。图14.16创建导航规则的现在,在From 行重定向的操作,可以选中框中的Redirect复选框。是点击两次文件userLogin.jsp,来创建一个循环的导航规则(自己导航到自己),然后在 14.17<?xmlversion='1.0'encoding='UTF-<faces-configxmlns="h <?xmlversion='1.0'encoding='UTF-<faces-configxmlns="h <<目节点oJSF,然后选择菜单Run>RunAs>3MyEclipseServerApplication,之MyEclipseMyEclipseTomcat并点击OK按钮后,项目就会自动发布,对应的服务器会启动。注意:URL以.faces结尾而不是.jsp的原因是因为在上面,FacesServlet映射到了*.faces扩展名,这意味着为了能使我们的JSF获得机会来处理请求并且构造组件树,须使用.faces扩展名来真正的页面。如果你不这样做,一个异常信息,包含下列信息:"FacesContextcannotbefound"。14.18现在可以尝试输入错误的用户名和进试,只有当两个值都输入了myeclipsenull会出现什么情况,答案是仍publicStringlogin()")return}return}。那么要了解执行流程:JSF容器启动并路径*.faces→创建的示例并存入sessionuserLogin.jspuserLogin.faces→提交→将表单UserBeanlogin()login()的方法返回值:导航路径→根据导航路径跳转到结果页面userLoginSuccess.faces→根据userLoginSuccess.jsp生成响应。这个过程和Struts2的流程是差不多的。JSF的一大特色就是将JSP页面中的组件和服务器对应起来,这样每个组件都可以加入自己的服务器端的机制。整个页面中的JSF组件是一个有机的整体,可以通过图 JSF生命周期JSF支持处理模型,虽然由于HTTP本身无状态(staess)的特性,使得这个模型多少有些地方和图形界面编程的仍不太相同,但JSF所提供的处理模型已足以让一些传统GUI程序的设计人员,可以用类似的模型来开发程序。JSF应用中,我们根据动作方法(actionmethod)的结果来决定要导向的网页,一个命令按钮连接到一个方法,这样的做法实际上就是JSF所提供的简化的处理的顺序,添加的时间处理将会先于调用程序(其实就是Action方法。理和最简单的使用导航规则令按钮。首先我们要基于oJSF项目来开发,先一份新的。先打开那个项目,然后在PackageExplorer视图中选中项目根结点,之后按下快捷键Ctrl+C一次,再按下Ctrl+V粘贴一次,再提示的项目框的Projectname处输入JSFEvent,然后点项目属性框里面进行修改,如图14.20红色部分所示。14.20packageimportpublicfinalclassUserBeanextendsObject可以让处理的方法接收一个javax.faces.event.ActionEvent参数。现在我们在UserBean中加以修改,给它添加一个处理方法publicvoidcheckInput(ActionEventevt)UserBeanpackageimportpublicfinalclassUserBeanextendsObjectpublicString");if(hasError){;//}getPassword().equals("myeclipse")){return}return}@parampublicvoidcheckInput(ActionEvent{if(getUserName()==null||hasError=true;}hasError=}privateStringuserName;privateStringpassword;privateStringmessage;publicString{return}{this.message=}publicpublicStringgetUserName()return}publicvoidsetUserName(StringuserName)this.userName=}publicStringgetPassword()return}publicvoidsetPassword(Stringpassword)this.password=}}这两个方法中,我用定义完了这些后,我们就要使用了。还记得我们在14.4.4一节简单介绍过编辑 mandButtonid="submit"type="submit"action="#{UserBean.login}"value="登录"actionListener="#{UserBean.checkInput}">< <h:form<h:form<br><h:outputLabelfor="userName"<h:inputTextid="userName" :<h:inputSecretid="password" mandButtonid="submit"type="submit"action="#{UserBean.login}"value="登录"actionListener="#{UserBean.checkInput}">< 。其实JSF14.8节参考资 图14.21加入验证的登录页面执行效<%@pagelanguage="java"<%@pagelanguage="java"<%@taglib /jsf/html"prefix="h"<%@taglib /jsf/core"prefix="f"<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01 你好<h:outputTextvalue="#{UserBean.userName}"></h:outputText>,您已经成功 <?xmlversion='1.0'encoding='UTF-<faces-configxmlns="h <?xmlversion='1.0'encoding='UTF-<faces-configxmlns="h 。<注。代码中的action=”regok”直接指向了一个导航规则,之后再次发布项目,打开页面,点击页面中的按钮,那么会直接跳packageimport publicclassLogHandlerimplementspackageimport publicclassLogHandlerimplementsActionListenerpublicvoidprocessAction(ActionEvente)处理newjava.util.Date())); 源:e.getSource());}}}。册处理器,例如 方法Listener,然后操作组件的时候,就可以发生,然后就调用处理器中的方法processAction(ActionEvente)。那么最后经过修改后的 mandButtonid="reg"type="submit" 处理类-- 按钮后,可以看到Console中 <%@<%@pagelanguage="java"<%@taglib /jsf/html"prefix="h"<%@taglib /jsf/core"prefix="f"Stringpath=request.getContextPath();StringbasePath=<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01<base<h:outputText<h:form<br><h:outputLabelfor="userName"<h:inputTextid="userName" :<h:inputSecretid="password" mandButtonid="submit"type="submit"action="#{UserBean.login}"value="登录"actionListener="#{UserBean.checkInput}">< mandButtonid="reg"type="submit" 处理类-- 。JSFManagedBeanManagedBean对象,或者注入普通的对象。例如Spring中常有这样的配置片段:<beanid="UserBean"<property字符串,值为“”的属性username。而在我们前面开发的oJSF应用中的faces-config.xml中,有这样的代码片段:Spring的<refbean="UserManager"/>这样的注入方式呢?答案是肯定的。JSF配置文件faces-config.xml中的对应代码片段是:当然,前提是UserBean要加入一段属性定义的代码:privateUserManager{return}publicvoidsetUserManager(UserManager{this.userManager=}Spring的流行,越来越多的项目开始使用它来整合各种各样的其它框架,在此我SpringJSFJSFSpring成功,那么Spring+Hibernate照搬以前的开发过程即可实现完整的JSF+Spring+Hibernate。整合的文档位于文档《SpringFramework开发参考手册》的JavaServerFaces(JSF)是一个基于组件的,驱动的Web框架。这个框架很受欢迎。Spring与JSF集成的关键类是DelegatingVariableResolver。 中间层与 层整合的最简单办法就是使用DelegatingVariableResolver类。要在应用中配置变量解析器(VariableResolver,你需要编辑faces-context.xml文件。在<faces-config/>元素里面增加一个<application/>元素和一个 元素。变量解析器的值将引用Spring的DelegatingVariableResolver首先会将查询请求委派到JSF实现的默认的解析器Spring的“businesscontextWebApplicationContextJSF所管理的bean中使用依赖注射非常容易。JSF所管理的bean都定义在faces-config.xml文件中。下面例子中的如果所有属性已经映射到faces-config.xml文件中相关的bean,一个自定义的VariableResolverbean。这时,FacesContextUtils可以使这个任务变得很容易。它类似于WebApplicationContextUtils,不过它接受FacesContext而不是ServletContext作为参数。 DelegatingVariableResolverJSFSpring要更全面的集成,JSF-Spring这个项目。似有所得,然而,这段文档却是要结合前文才能读懂的,所以Spring的文档总是让人者向已存在的受管Bean中注入其它的Bean定义。这个例子基于我们的oJSF项目修读者参考14.5.1位于ManagedBean中的处理方法一节的内容,用粘贴的方Webjsfspring,并记得修改项目的发布目标。接着我们要给项目加入Spring开发功能,最少的依赖包是SpringCoreLibraries和SpringWebLibrariesMyEclipseSpring开发功能向导来完成,详细的操作过程可以MyEclipse>ProjectCapabilitiesAddSpringCapabilities...AddSpringCapabilities向导。在这Selectthelibrariestoaddtothebuildpath(选择添加到类路径的类库)一栏的Spring2.0CoreLibrariesSpring2.0WebLibraries;如果您要日后整合HibernateSpring2.0PersistenceCoreLibrariesJARLibraryInstallation(JAR类库安装)CopycheckedLibrarycontentstoprojectfolder(TLDsalwayscopied),这个选项将选中的类库的JAR文件到项目,在此单选钮下方的LibraryFolder会自动选中/WebRoot/WEB-INF/lib,点击Next按钮进入第二页(这样做主要是为了修正MyEclipse钮SpringFinish按钮PackageExplorerReferencedLibrariesjar文package@authorpackage@authorpublicclassUserManager@paramusername@param@returnpublicbooleancheckLogin(Stringusername,String{"myeclipse".equals(password)){return}return}}JPA或packageimport类似于Actionpublicfinalclasspackageimport类似于ActionpublicfinalclassUserBeanextendsObject//{return}thisthis.userManager=}publicStringlogin(){return}return}privateStringprivateStringpublicStringgetUserName()return}publicvoidsetUserName(StringuserName)this.userName=}publicStringgetPassword()return}publicvoidsetPassword(Stringpassword)this.password=}}<?xmlversion="1.0"encoding="UTF-<web-appxmlns="h <?xmlversion="1.0"encoding="UTF-<web-appxmlns="h " <<<SpringBeanWeb版本的器,这个监将会启动Spring的Bean工厂。在名为文件位置,当然也可以加入的路径,以逗号隔开即可。这些位置分别是WEB-INF/XMLWEB-INF/classes下的同样MyEclipseapplicationContext.xml,SpringBeancontextConfigLocationXML配置文件中创建Bean类。<?xmlversion="1.0"encoding="UTF-<beansxmlns="<?xmlversion="1.0"encoding="UTF-<beansxmlns="""applicationContext.xml。solver>JSF的默认变量解析器,这是什么意思呢?value的值可以是#{bean名字.属性或者方法名},这就是一段析器所做的工作。那好了,现在问题就好办了,SpringJSF的变量解析器做了一点改造,每当看到#{bean名字..JSFfaces配置文件中找,找到了就返回,找不到SpringBean有两种可选方案,JSFSpring,JSP页面中也会产生作用。好了,说到这里,也许有人14.6节的内容联系起来了,不过,稍有不同的是,JSF配置文件中不需要再额外定义那个UserManager的受管Bean了,此时的faces-config.xml完整代码如下:<?xmlversion='1.0'encoding='UTF-<faces-configxmlns="h 14.7UserManagerBeanOK了,别的地方就不需要做改动了,发布项目并运行后,键入地址进试 UserManger类中的登录验证方法了,而这个对象的实例是从SpringJSF可视化流程设计器中看到页面流程,还可以进行一些JSF的特定设置,例如:作用域设置为session。<?xmlversion="1.0"encoding="UTF-<beans"<?xmlversion="1.0"encoding="UTF-<beans""<beanid="UserBean"<property<refbean="UserManager"applicationContext.xml<?xmlversion='1.0'encoding='UTF-<<?xmlversion='1.0'encoding='UTF-<faces-configxmlns="h 。JSF+JPA的MyEclipseBlog实MyEclipse6提供了一套名为ExampleOn-Demand的实例代码库,这些例子都是一个是JSF+JPA开发的简易Blog页面中的按钮InstallProject就可以了,此时MyEclipse6会并安装项目,过程如开后就会自动启动Derby数据库。图14.25项目过 JSP2.0AJAXICEFacesJSFMyBlogJSF/JPA增删改读示例项目*Apache2LICENSE.txt*MyBlogJSFJPAMyBlogJSF/JPA增删改读示例项目*Apache2LICENSE.txt*MyBlogJSFJPAJSFJPA作为持久层的简单的网络博客应这个项目展示了对单个博客数据库表进行增删改查的功能。同时这个项目已经事先在MyEclipseTomcat6Derby数据库,数据库中已经包含了一个MyEclipse6.0出厂时就带的示例数据库。一个JSF页 到4个对提交的数据库表进行增删改查的功能模 为了帮助您理解MYBLOG数据库的结构
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初中任务三 举办演讲比赛(教学设计)-2023-2024学年统编版语文八年级下册
- 股份制改革项目实施方案及合同文书
- 农业生产的农业大数据应用方案
- 药物集中招标选购工作计划范文
- 混凝土调度年终工作总结
- 公司秘书工作总结
- 临床药师工作计划格式
- 寒假学习计划安排表
- 小学学校寒假工作计划范文
- 保山租房合同范本
- 2024年宁夏工业职业学院单招职业技能测试题库及一套参考答案
- 第21章 一元二次方程 复习课(第2课时) 教学设计
- 成人呼吸支持治疗器械相关压力性损伤理论考核试题
- 工程管理行业环境分析报告
- (正式版)HGT 20593-2024 钢制化工设备焊接与检验工程技术规范
- 部编版小学语文二年级下册第三单元集体备课教材分析
- 部编版小学道德与法治三年级下册课堂同步试题全册(含答案)
- 部编版《道德与法治》五年级下册第7课《不甘屈辱 奋勇抗争》教学课件
- 天津市和平区2023-2024学年九年级历史下学期第一次质量调查历史试题
- 【电动汽车充电桩控制系统设计10000字(论文)】
- T-CRHA 028-2023 成人住院患者静脉血栓栓塞症风险评估技术
评论
0/150
提交评论