Liferay_5.X_SSH_开发案例.v0.1.doc_第1页
Liferay_5.X_SSH_开发案例.v0.1.doc_第2页
Liferay_5.X_SSH_开发案例.v0.1.doc_第3页
Liferay_5.X_SSH_开发案例.v0.1.doc_第4页
Liferay_5.X_SSH_开发案例.v0.1.doc_第5页
免费预览已结束,剩余58页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

LiferayLiferay 5 25 2 SSHSSH 开发案例开发案例 ServiceService BuilderBuilder 开发案例开发案例 第五分册 开发案例 版本号 V0 2 0 bingo 2010 年 09 月 2 LIFERAY 5 X SSH 开发案例开发案例 目目 录录 序言序言 4 一 数据结构一 数据结构 5 1 分析数据模型 5 2 创建数据模型 5 3 数据库里创建表结构 5 二 自动生成持久化层和服务层的类二 自动生成持久化层和服务层的类 6 1 编写SERVICE XML 6 2 修改ANT文件 增加ANT任务 8 3 利用 SERVICE BUILDER自动生成持久化层和服务层的类 8 三 配置一个三 配置一个 PORTLET 10 1 定义 COMPLAINTSPORTLET JAVA 类 10 2 定义 PORTLET 11 3 配置COMPLAINTS这个 STRUTS PORTLET 11 4 定义页面流 12 5 定义页面布局 12 6 创建 JSP 页面 12 7 国际化 PORTLET 14 8 归类 PORTLET 14 9 最后部署代码 发布 15 10 TABS多页面标签使用 15 四 业务实现四 业务实现 17 1 添加记录 17 1 创建一个Action类 17 2 添加后台业务实现 19 3 在页面流中配置这个Action 25 4 定义页面标题布局 25 5 在JSP页面中增加一个Form 表单 26 6 创建成功返回页面success jsp和失败错误页面error jsp 30 7 国际化 31 8 发布 32 2 附件上传下载 33 1 数据表的设计 33 2 JSP页面的代码 33 3 Struts Action如何处理 34 4 Service Impl的实现 34 5 如何显示附件 35 6 附件下载的Struts Action 37 3 3 查询记录 37 1 创建查找方法 37 2 创建查找记录的Action 38 3 创建下载记录附件的Action 39 4 在页面流中配置该Action 41 5 定义页面流中的页面标题布局 41 6 创建jsp页面 42 7 国际化配置 48 8 发布 48 4 修改记录 49 1 创建编辑记录方法 49 2 创建编辑记录Action 50 3 在页面流中配置这个Action 51 4 定义页面流中path的页面标题布局 51 5 创建jsp页面 51 6 国际化 51 7 发布 51 5 删除记录 52 1 创建删除记录方法 52 2 创建删除记录Action 52 3 在页面流中配置这个Action 52 4 定义页面流中path的页面标题布局 52 5 创建jsp页面 52 6 国际化 53 7 发布 53 五 权限机制五 权限机制 53 总结总结 53 4 Liferay 5 X SSH 开发案例开发案例 序言序言 各位朋友 研究 Liferay 大概有一年了 可是对于深层次的开发理解还是经常摸不透 处于初学者 为了进一步熟悉 Liferay 开发平台和 SSH 架构 我结合实际需要 开发一个 检举平台 在 Liferay 开发的门户上扩展开发 并将开发思路和关键步骤写下来以供同仁学 习和参考 一同探讨 共同进步 由于时间仓促 有写的不对 不到位 还请多担待点 有什么好的建议 可以反馈给我 我真心感谢你的参与 首先 我们看一下 Liferay 5 x 源码 无论是 portal 和 ext 工程 我们看到的目录都很繁 杂 其实我们只要关注 3 个目录就够了 这就是 ext 工程对应目录 ext impl src ext service src 和 ext web 对于 portal 工程对应目录 portal impl src portal service src 和 portal web 对于在工程 portal 里面的 portal impl src portal service src 和 portal web 其中 portal impl src portal service src 是 portal 工程已经实现的所有 portlet 的 java 代码和部分资源文 件 portal web 目录是放置网页文件和 portal 的配置文件 ext 工程对应目录 ext impl src ext service src 和 portal web 跟 portal 是很类似的 ext impl src ext service src 是放置我们自己开发的 portlet 的 java 代码 ext web 是自己开发 portlet 对应的网页文件和配置文件 为了便于理解 结合下面这个案例来具体说明 案例 近期根据公司纪委的要求 要在企业门户上增加一个信息入口 主要是提供一 个公众检举各类贪污腐败的现象的平台 在这个检举平台上 匿名用户和门户用户都能访 问和发表信息 而至于发表上去的信息一般用户是没有权限看得到 只有纪委有此权限 也就是要开发一个类似留言板或者论坛的功能 首先 看一下功能需求 了解一下大概是要实现些什么功能 1 这个举报平台要求权限控制 不同角色拥有不同的权限 匿名用户只允许发布信 息 只有公司纪委负责人有权限查看举报信息和历史记录 2 在举报信息里允许用户上传下载附件 3 记录举报信息的阅读状态 创建 修改时间等系统信息 4 允许纪委对不真实的举报信息进行维护 可以增删查改纪录信息 5 在用 web 去实现此平台时需要考虑简单易用美观 最好是多标签页面的形式所有 功能显示在一起 利用 Liferay 5 X 实现就需要考虑以下几个关键点 1 需要使用 Liferay 的权限机制 2 需要考虑文件的上传下载 在这里我采用 JCR 的方式的实现附件的上传和下载 3 利用 SSH 的架构开发增 删 查 改功能 4 利用 Liferay 的 UI 标签 tabs 实现多 tab 标签页面操作 5 分页必不可少的 Liferay UI 标签 liferay ui search iterator 的使用 当然还有其他 的标签 根据案例分析 通过以下几个过程实现 5 一 数据结构一 数据结构 1 分析数据模型 分析数据模型 1 需要考虑系统字段 常规的有 uuid groupId companyId userId userName createDate modifiedUserId modifiedUserName modifiedDate isRead 2 业务字段有主键 complaintsId name title content attachments complaintor tel email des cription notes anonymous 2 创建数据模型 创建数据模型 编写数据库脚本 这里以 mysql 为例 写 Complaints sql 文件 如下 create table ComplaintsInfo uuid varchar 75 null complaintsId bigint not null primary key groupId bigint companyId bigint userId bigint userName varchar 75 null createDate datetime null modifiedUserId bigint modifiedUserName varchar 75 null modifiedDate datetime null name varchar 300 null title varchar 300 null content longtext null attachments tinyint isRead tinyint complaintor varchar 50 null tel varchar 50 null email varchar 50 null description longtext null notes longtext null anonymous tinyint engine InnoDB 3 数据库里创建表结构 数据库里创建表结构 在开始菜单那里点运行 运行的地方输入 cmd 6 然后输入下面的命令登录到 lportal 数据 mysql u root p default character utf8 密码 sa 是你数据库安装时设置的密码 然后执行上面的 sql 语句 在 DOS 下执行上面的 sql 语句的命令是 source c Complaints sql 到此 执行完数据库里就创建好我们要建的表 二 自动生成持久化层和服务层的类二 自动生成持久化层和服务层的类 1 编写 编写 service xml 利用 portal 里面代码规范生成机制 Liferay Service Builder 自动生成持久化层和服务层 的类 ComplaintsInfo 7 ComplaintsInfoName 8 注解 entity name 是和我们即将建立的和数据库表ComplaintsInfo一一对应实体的类 名 可以和数据库表名不同 2 修改 修改 ant 文件 增加文件 增加 ant 任务任务 建好 service xml 文件后 我们在 ext impl 目录下打开 build perent xml 文件 在 的下面添加任务 在ext impl 目录下的 build perent xml 文件中找到 3 利用 利用 Service Builder 自动生成持久化层和服务层的类自动生成持久化层和服务层的类 在 MyEclipse 或者 Eclipse 的 ant 视图里面打开 ext impl 目录下的 build xml 执行 build service portlet user 任务 9 然后双击 或者选中build service portlet complaints 点 Run 然后 Ant 工具将自动生成 Hibernate 文件和 Spring 配置文件 你刷新 ext 这个工程 就可以看到 F5 刷新 刷新 ext 之后 我们会发现在 ext impl src com ext portlet complaints 和 ext service src com ext portlet complaints 下面多了几个目录和文件 这是都是系统自动产生的 hibernate 的实体类和持久化类 如果我们再细心些 也可发现在 ext impl src META INF 目录下配置文件都多些内容 这些都是系 统已经自动将对应的实体类 持久化类 工具类等配置为相应的 javabean util service 等 这样做无疑节省了很多时间 而且减少我们人 工配置的错误 注解 在这里补充和解释一下 Service Builder 的原理及生成代码的详细过程 首先 在 ext ext service src 文件夹下创建 models services 和 service persistence 比如 在complaints 这个portlet 中它会创建下面这些包 plaints plaints model plaints service plaints service persistence 紧接着 ServiceBuilder 将在 ext ext impl src 文件夹下面创建 models services 和 service persistence 的 implementations 比如 在complaints 这个portlet 中它会为这个 service 创建下面这些包 plaints model impl plaints service base plaints service http 10 plaints service impl plaints service persistence 最后 在 ext ext impl src META INF 文件夹下面会更新 Hibernate 映射文件 ext hbm xml model hints 文件 ext model hints 和Spring beans 文件ext spring xml 接下来 我们就可以进行业务实现编码 三 配置一个三 配置一个 portlet 在业务实现之前 我们需要先增加 complaints 这个 portlet 后 就可以在 complaints 这 个 portlet 里面进行一系列的改造 方便我们后面一步步介绍增 删 查 改 接下来 详 细介绍一下创建这样一个 Struts portlet 的具体步骤和方法 跟 JSP portlet 类似 我们需要 在portlet ext xml 和 liferay portlet ext xml 文件中配置 complaints 这个Struts portlet 跟 JSP portlet 区别在于 Struts portlet 需要创建一个继承 StrutsPortlet 这个类的 java 文件 在 struts config xml 配置文件中配置页面流 在tiles defs xml 文件配置页面布局 1 定义 定义 ComplaintsPortlet java 类类 我们需要在ext ext impl src 文件夹下创建一个包名为 plaints的包 然后在 plaints这个包里创建一个继承 StrutsPortlet 这个类的文件 ComplaintsPortlet java 在该文件中写入下面的代码并保存 package plaints import java io IOException import javax portlet PortletException import javax portlet RenderRequest import javax portlet RenderResponse import com liferay portlet StrutsPortlet 每个 portlet 都对应一个 portlet 类 struts portlet 需要继承 StrutsPortlet 类 该类只要重写父类的 doView 方法 author xubin public class ComplaintsPortlet extends StrutsPortlet public void doView RenderRequest renderRequest RenderResponse renderResponse throws IOException PortletException super doView renderRequest renderResponse 11 2 定义 定义 Portlet 按照 portal 原理新增 complaints 这个 portlet 在 ext ext web docroot WEB INF 文件夹下定 位到portlet ext xml 这个文件 在 portlet ext xml 这个文件里面的 之后和 之前 加如下面这些代码 complaints Complaints plaints ComplaintsPortlet view action ext complaints view 0 text html com liferay portlet StrutsResourceBundle Complaints Complaints Informations power user user 3 配置 配置 complaints 这个这个 Struts portlet 在 ext ext web docroot WEB INF 文件夹下定位到liferay portlet ext xml 这个文件 在 liferay portlet ext xml 这个文件里面的之后加如下面这些代码 complaints ext complaints 12 false 4 定义页面流 定义页面流 一般情况 首先 要在ext ext impl src 文件夹下创建一个包名为 plaints action 的包 然后在 plaints action 这个包里创建一 个继承 PortletAction 这个类的文件 ViewComplaintsAction java 在该文件中写入 Action 代码并 保存 这里首先第一个页面我们显示一个简单的页面 不需要用到 action 类 所以暂时不用写 在这个例子中 我们首先只用简单配置一个页面流 在 ext ext web docroot WEB INF 文 件夹里定位到 struts config xml文件并打开它 并在该文件中的之前加入 以下代码并保存 5 定义页面布局 定义页面布局 在 ext ext web docroot WEB INF 文件夹里定位到 tiles defs xml 文件并打开它 在tiles defs xml 中的之后加入下面的代码并保存 6 创建 创建 JSP 页面页面 在 ext ext web docroot html portlet ext 文件夹下创建文件夹complaints 如果已创建就不 需要再创建文件夹complaints 在 ext ext web docroot html portlet ext complaints 文件下创建 init jsp 并在 init jsp 文件中写入下面的代码并保存 接下来 我先利用 Liferay ui 标签 tabs 设计好多 tab 标签页面 即定位在 ext ext web docroot html portlet ext complaints 文件下创建 tabs1 jsp 13 liferay ui tabs names url 然后在 ext ext web docroot html portlet ext complaints 文件下创建 view jsp 并在 view jsp 文件中写入下面的代码并保存 c if test c when test 14 c when test c when test 然后在 ext ext web docroot html portlet ext complaints 文件下创建 add complaints jsp view complaints jsp 和 view notes jsp 三个页面 里 面暂时不写入任何内容后续写入 这里作为多 tabs 标签的三个页面 注解 详情看 10 tabs 多页面标签使用 7 国际化 国际化 Portlet 在 ext ext impl src content 文件下定位到 Language ext properties 文件并打开它 在 javax portlet title EXT 1 Reports 这一行后面增加下面内容并保存 plaints Complaints 这个代码把标题plaints映射为Complaints 为了中文化 汉化 我们还需要在 ext ext impl src content 文件下定位到 Language ext zh CN properties 文件并打开 如果没有 Language ext zh CN properties 这个文件 就在 ext ext impl src content 文件下创建 Language ext zh CN properties 文件 在该文件中写入以下 代码 plaints u68c0 u4e3e 为了中文化 汉化 我们还需要在 ext ext impl src content 文件下定位到 Language ext zh CN properties native 文件并打开 如果没有 Language ext zh CN properties native 这个文 件 就在 ext ext impl src content 文件下创建 Language ext zh CN properties native 文件 在该文 件中写入以下代码 plaints u68c0 u4e3e 注解 8 归类 归类 Portlet 在 ext ext web docroot WEB INF 文件夹下定位到 liferay display xml 并打开它 在 liferay display xml 文件中 和之间写入下面的代码并保存 15 注解 9 最后部署代码 发布 最后部署代码 发布 如果 Tomcat 正在运行 把它的服务停了 在 ext ext web 文件中找到 build xml 打开 ANT 视图 点击 deploy 发布 启动 Tomcat 服务 登录门户 添加 complaints 这个 portlet 注 上图所示 portlet 里面是三个标签页面 分别为 Complaints ComplaintsInformationList ComplaintsNotes 其中 Complaints 为默认页面 如果要让三个页面标题显示中文 需要国际化配置 在后续代码里有介绍 因为 add complaints jsp view complaints jsp 和 view notes jsp 三个页面里都没有 写入任何内容 所以显示为空 下文将继续延伸 10 tabs 多页面标签使用多页面标签使用 这里先给出一个使用例子如下 对应代码为 liferay ui tabs names ww1 www param tabs1 refresh input type submit value 16 div id webFields Title Title jQuery function new Liferay AutoFields container webFields baseRows webFields lfr form row fieldIndexes formFieldsIndexes sortable true sortableHandle field label 改造一下 就可以使用到举报平台这个例子上 定位到 ext ext web docroot html portlet ext complaints 文件夹下 我们可以看到 tabs1 jsp 和 view jsp 两个 jsp 页面就是该案例的多 tabs 标签页面的实现 17 四 业务实现四 业务实现 在这个部分 我们将在上一个简单的 Struts Portlet 的基础上 我们实现一个复杂一点 的 Struts Portlet 开发 这里包含里增删查改以及附件上传下载 1 添加记录 添加记录 1 创建一个 创建一个 Action 类类 在 ext ext impl src 文件下加创建 plaints action 包 并在该包下面创建一个继 承 PortletAction 的 Action 类AddComplaintsAction java 文件 在 AddComplaintsAction java 文件中写入下面的代码并保存 package plaints action import java io File import java util ArrayList import java util List import javax portlet ActionRequest import javax portlet ActionResponse import javax portlet PortletConfig import javax portlet RenderRequest import javax portlet RenderResponse import org apache struts action ActionForm import org apache struts action ActionForward import org apache struts action ActionMapping import plaints model ComplaintsInfo 18 import com liferay portal kernel upload UploadPortletRequest import com liferay portal kernel util FileUtil import com liferay portal kernel util ObjectValuePair import com liferay portal kernel util ParamUtil import com liferay portal kernel util Validator import com liferay portal struts PortletAction import com liferay portal util PortalUtil import com liferay portal kernel util Constants public class AddComplaintsAction extends PortletAction public void processAction ActionMapping mapping ActionForm form PortletConfig config ActionRequest req ActionResponse res throws Exception String title req getParameter title String cmd ParamUtil getString req Constants CMD if Validator isNull title title equals setForward req plaints error else if cmd equals Constants ADD addEntry req public ActionForward render ActionMapping mapping ActionForm form PortletConfig portletConfig RenderRequest req RenderResponse res throws Exception String title req getParameter title if title null setForward req plaints view complaints return mapping findForward getForward req plaints view protected void addEntry ActionRequest req throws Exception UploadPortletRequest uploadRequest PortalUtil getUploadPortletRequest req List ObjectValuePair files new ArrayList ObjectValuePair for int i 1 i 0 ObjectValuePair ovp new ObjectValuePair fileName bytes files add ovp ComplaintsInfo info ComplaintsLocalServiceUtil addComplaints req files req setAttribute COMPLAINTS info setForward req plaints success 注解 2 添加后台业务实现 添加后台业务实现 首先 创建一个 Action 工具类 ComplaintsLocalServiceUtil java 这里创建 ComplaintsLocalServiceUtil java 主要是为了集中调用自动生成的接口和持 久化类来处理增删查改等方法 你也可以将这个类里的方法直接写到上面创建的 Action 类 AddComplaintsAction 里面 为了实现文件上传下载 新建 ComplaintsLocalServiceUtil 这个 类 具体做法是 定位到 ext ext impl src 文件下的 plaints action 包 并在该包 下面创建一个类ComplaintsLocalServiceUtil java 在该文件中添加如下代码并保存 package plaints action import java io IOException import java util Date import java util List import javax portlet ActionRequest import javax portlet RenderRequest import javax servlet http HttpServletRequest import plaints model ComplaintsInfo import plaints service ComplaintsInfoLocalServiceUtil import com liferay portal PortalException import com liferay portal SystemException import com liferay portal kernel util ObjectValuePair import com liferay portal kernel util ParamUtil import com liferay portal kernel util WebKeys import com liferay portal service ServiceContext import com liferay portal service ServiceContextFactory import com liferay portal theme ThemeDisplay import com liferay portal util PortalUtil 20 public class ComplaintsLocalServiceUtil public static String COMPLAINTS null public static final String ADD COMPLAINTS Add Complaints public static ComplaintsInfo addComplaints ActionRequest req List ObjectValuePair files throws PortalException SystemException IOException ThemeDisplay themeDisplay ThemeDisplay req getAttribute WebKeys THEME DISPLAY long userId themeDisplay getUserId String name req getParameter name String title req getParameter title String content req getParameter content String complaintor req getParameter complaintor String tel req getParameter mobile phone String email req getParameter email ServiceContext serviceContext ServiceContextFactory getInstance ComplaintsInfo class getName req Update info ComplaintsInfo info null info ComplaintsInfoLocalServiceUtil addComplaintsInfo userId name title content files complaintor tel email serviceContext return info 其次 为了实现附件上传 jcr 机制是在 service 层保存附件的 所以还得在 service 层 添加一些方法和属性 我们需要分别定位到这几个问题 ComplaintsInfoLocalService ComplaintsInfoLocalServiceUtil ComplaintsInfoLocalServiceImpl ComplaintsInfo 和 ComplaintsInfoImpl 接下来具体说明 为了创建查找修改附件 我们需要定义获得目录 创建等方法 于是需要在 ext ext service src 文件下的plaints model包里的ComplaintsInfo java 文 件 在该文件里加入下面的代码并保存 package plaints model public interface ComplaintsInfo extends ComplaintsInfoModel public java lang String getUserUuid throws com liferay portal SystemException public void setUserUuid java lang String userUuid public java lang String getAttachmentsDir public void setAttachmentsDir java lang String attachmentsDir public java lang String getAttachmentsFiles throws com liferay portal PortalException com liferay portal SystemException 21 上面接口里定义了我们需要的方法 下面就是实现接口 定位在 ext ext impl src 文件下 的plaints model impl包里的ComplaintsInfoImpl java 文件 在该文件里加入下面的代码并保存 package plaints model impl import plaints model ComplaintsInfo import com liferay documentlibrary NoSuchDirectoryException import com liferay documentlibrary service DLServiceUtil import com liferay portal PortalException import com liferay portal SystemException import com liferay portal kernel log Log import com liferay portal kernel log LogFactoryUtil import com liferay portal model CompanyConstants import com liferay portal util PortalUtil public class ComplaintsInfoImpl extends ComplaintsInfoModelImpl implements ComplaintsInfo public ComplaintsInfoImpl public String getUserUuid throws SystemException return PortalUtil getUserValue getUserId uuid userUuid public void setUserUuid String userUuid userUuid userUuid public String getThreadAttachmentsDir return complaints public String getAttachmentsDir if attachmentDirs null attachmentDirs getThreadAttachmentsDir getComplaintsId return attachmentDirs public void setAttachmentsDir String attachmentsDir attachmentDirs attachmentsDir public String getAttachmentsFiles throws PortalException SystemException String fileNames new String 0 try fileNames DLServiceUtil getFileNames getCompanyId CompanyConstants SYSTEM getAttachmentsDir 22 catch NoSuchDirectoryException nsde return fileNames private static Log log LogFactoryUtil getLog ComplaintsInfoImpl class private String userUuid private String attachmentDirs 有了上面的基础 下面可以添加保存举报信息和附件的方法了 定位在 ext ext service src 下plaints service包 ComplaintsInfoLocalService java 文件 在该文件里加入下面的代码并保存 public plaints model ComplaintsInfo addComplaintsInfo long userId String name String title String content List ObjectValuePair files String complaintor String tel String email ServiceContext serviceContext throws com liferay portal PortalException com liferay portal SystemException 注 这里主要是在接口 ComplaintsInfoLocalService 里增加一个包含附件的添加记 录的方法 然后定义工具类 ComplaintsInfoLocalServiceUtil 即定位在 ext ext service src 文件夹下的plaints service 这个包里 ComplaintsInfoLocalServiceUtil java 文件 在该文件里加入下面的代码并保存 public static plaints model ComplaintsInfo addComplaintsInfo long userId String name String title String content List ObjectValuePair files String complaintor String tel String email ServiceContext serviceContext throws com liferay portal PortalException com liferay portal SystemException return getService addComplaintsInfo userId name title content files complaintor tel email serviceContext 接口和工具类添加了需要的方法之后 实现接口 ComplaintsInfoLocalServiceImpl 即定位在 ext ext impl src 文件下的 plaints service impl包里的ComplaintsInfoImpl java 文件 在该文件里加入下面的代码并保存 package plaints service impl 23 import java util Date import java util List import mons lang time StopWatch import plaints model ComplaintsInfo import plaints service ComplaintsInfoLocalServiceUtil import plaints service base ComplaintsInfoLocalServiceBas eImpl import com liferay counter service CounterLocalServiceUtil import com liferay documentlibrary DuplicateFileException import com liferay documentlibrary NoSuchDirectoryException import com liferay portal PortalException import com liferay portal SystemException import com liferay portal kernel log Log import com liferay portal kernel log LogFactoryUtil import com liferay portal kernel util ObjectValuePair import com liferay portal kernel util StringPool import com liferay portal model CompanyConstants import com liferay portal model GroupConstants import com liferay portal model User import com liferay portal service ServiceContext public class ComplaintsInfoLocalServiceImpl extends ComplaintsInfoLocalServiceBaseImpl public Compl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论