`
Ben.Sin
  • 浏览: 233205 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

【转】Spring 结合velociy/freemaker的相关配置

阅读更多

Spring Framework开发参考: 14.4. Velocity和 FreeMarker

VelocityFreeMarker 是两种模板语言,都可以做为view层技术在Spring MVC 应用中使用。 它们的语言风格和适用对象都很相似,这里把它们放在一起讨论。至于它们语义和语法上的不同,可以参考 FreeMarker 站点。

14.4.1. 需要的资源

 

使用Velocity或FreeMarker需要包含 velocity-1.x.x.jar freemarker-2.x.jar 。另外Velocity还需要 commons-collections.jar 。一般把这些jar包放在 WEB-INF/lib 下,这样可以保证J2EE Server找到它们并加到web应用的classpath下。这里同样假设你的 'WEB-INF/lib' 目录下已有 spring.jar !Spring的发布包中已经提供了最新的稳定版本的Velocity、FreeMarker和commons collections,可以从相应的 /lib/ 子目录下得到。如果你想在Velocity中使用Spring的dateToolAttribute或numberToolAttribute,那你还需 要 velocity-tools-generic-1.x.jar

 

14.4.2. Context 配置

 

通过在 '*-servlet.xml' 中增加相关的配置bean,可以初始化相应的配置,如下:

    
     <!--
     该bean使用一个存放模板文件的根路径来配置Velocity环境。你也可以通过指定一个属性文件来更精细地控制Velocity,但对基于文件的模板载入来说,默认的方式已相当健全
     -->
    

    
<bean id="velocityConfig">
  <property name="resourceLoaderPath" value="/WEB-INF/velocity/"/>
</bean>

     <!--
     也可以把ResourceBundle或XML文件配置到视图解析器中。如果你需要根据Locale来解析不同的视图,就需要使用resource bundle解析器。
     -->


    
<bean id="viewResolver">
  <property name="cache" value="true"/>
  <property name="prefix" value=""/>
  <property name="suffix" value=".vm"/>
</bean>
    
     <!-- freemarker config -->
    

    
<bean id="freemarkerConfig">
  <property name="templateLoaderPath" value="/WEB-INF/freemarker/"/>
</bean>

     <!--
     也可以把ResourceBundle或XML文件配置到视图解析器中。如果你需要根据Locale来解析不同的视图,就需要使用resource bundle解析器。
     -->


    
<bean id="viewResolver">
  <property name="cache" value="true"/>
  <property name="prefix" value=""/>
  <property name="suffix" value=".ftl"/>
</bean>

注意

对于非web应用,你需要在application context的配置文件中声明 VelocityConfigurationFactoryBean 或者 FreeMarkerConfigurationFactoryBean


14.4.3. 创建模板

 

模板文件需要存放在配置*Configurer bean时所指定的目录下,就像上面的例子所示。 这里不准备详细叙述使用这两种语言创建模板的细节,你可以参考相应的站点获取那些信息。 如果你用了我们推荐的视图解析器,你会发现从逻辑视图名到相应模板文件的映射方式与使用 InternalResourceViewResolver 处理JSP时的映射方式类似。比如若你的控制器返回了ModelAndView对象,其中包含一个叫做“welcome”的视图名,则视图解析器将试图查 找 /WEB-INF/freemarker/welcome.ftl/WEB-INF/velocity/welcome.vm 作为合适的模板。

 

14.4.4. 高级配置

 

以上着重介绍的基本配置适合大部分应用需求,然而仍然有一些不常见的或高级需求的情况,Spring提供了另外的配置选项来满足这种需求。

14.4.4.1. velocity.properties

 

这个文件是可选的,不过一旦指定,其所包含的值即影响Velocity运行时状态。只有当你要做一些高级配置时才需要这个文件,这时你可以在上面定义的 VelocityConfigurer 中指定它的位置。

     <bean id="velocityConfig"
     class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
     <property name="configLocation
     value="/WEB-INF/velocity.properties"/>
     </bean>
    

另一种方法,你可以直接在Velocity config bean的定义中指定velocity属性,来取代“configLocation”属性。

<bean id="velocityConfig">
  <property name="velocityProperties">
    <props>
      <prop key="resource.loader">file</prop>
      <prop key="file.resource.loader.class">
        org.apache.velocity.runtime.resource.loader.FileResourceLoader
      </prop>
      <prop key="file.resource.loader.path">${webapp.root}/WEB-INF/velocity</prop>
      <prop key="file.resource.loader.cache">false</prop>
    </props>
  </property>
</bean>

关于Spring中Velocity的配置请参考 API文档 或者参考Velocity自身文档中的例子和定义来了解如何配置 'velocity.properties' 文件。

 

14.4.4.2. FreeMarker

 

FreeMarker的'Settings'和'SharedVariables'配置可以通过直接设置 FreeMarkerConfigurer 的相应属性来传递给Spring管理的FreeMarker Configuration 对象,其中 freemarkerSettings 属性需要一个java.util.Properties 类型对象, freemarkerVariables 需要一个 java.util.Map 类型对象。

<bean id="freemarkerConfig">
  <property name="templateLoaderPath" value="/WEB-INF/freemarker/"/>
  <property name="freemarkerVariables">
    <map>
      <entry key="xml_escape" value-ref="fmXmlEscape"/>
    </map>
  </property>
</bean>
<bean id="fmXmlEscape"/>

关于settings和variables如何影响 Configuration 对象的细节信息,请参考FreeMarker的文档。


14.4.5. 绑定支持和表单处理

 

Spring提供了一个在JSP中使用的标签库,其中包含一个 <spring:bind/> 标签,它主要用来在表单中显示支持对象(译者注:即表单数据传输对象)的数据,并在一个 Validator (工作在Web层或业务逻辑层)校验失败时显示失败信息。 从1.1版本开始,Spring为Velocity和FreeMarker也提供了同样的功能,而且还另外提供了便于使用的宏,用来生成表单输入元素。

14.4.5.1. 用于绑定的宏

 

spring.jar 文件为这两种语言维护了一套标准宏,对于正确配置的应用,它们总是可用的。

在Spring库中定义的一些宏被认为是内部的(私有的),但当宏定义中不存在这样的范围界定时, 会使得所有的宏均是可见的,能够任意调用代码和用户模板。下面的一节将集中讨论模板中可以直接调用的宏。 如果希望直接查看宏的代码,它们分别是 org.springframework.web.servlet.view.velocity 包中的spring.vm文件和 org.springframework.web.servlet.view.freemarker 包中的spring.ftl文件。

 

14.4.5.2. 简单绑定

 

在扮演Spring表单控制器对应视图的html表单(或vm/ftl模板)里, 你可以模仿下面的代码来绑定表单数据并显示错误信息(和JSP的形式非常相似)。 注意默认情况下命令对象的名字是“command”,你可以在配置自己的表单控制器时通过设置'commandName'属性来覆盖默认值。 例子代码如下(其中的personFormVpersonFormF 是前面定义的视图):

     <!-- velocity宏自动可用 --> <html> ...
     <form action="" method="POST"> Name:
     #springBind( "command.name" ) <input type="text"
     name="${status.expression}" value="$!status.value"
     /><br> #foreach($error in
     $status.errorMessages) <b>$error</b>
     <br> #end <br> ... <input
     type="submit" value="submit"/> </form> ...
     </html>
    
     <!-- FreeMarker宏必须导入到一个名称空间,这里推荐你定义为'spring'空间
     --> <#import "spring.ftl" as spring />
     <html> ... <form action=""
     method="POST"> Name: <@spring.bind
     "command.name" /> <input type="text"
     name="${spring.status.expression}"
     value="${spring.status.value?default("")}"
     /><br> <#list
     spring.status.errorMessages as error>
     <b>${error}</b> <br>
     </#list> <br> ... <input
     type="submit" value="submit"/> </form> ...
     </html>
    

#springBind / <@spring.bind> 需要一个'path'属性,格式为命令对象的名字(默认值为'command', 除非你在配置FormController的属性时改变它)后跟圆点再加上你希望绑定到的命令对象的属性名。 你也可以使用类似“command.address.street”的格式来处理嵌套对象。使用 bind 宏时,HTML转码行为由web.xml中名为 defaultHtmlEscape 的ServletContext参数指定。

上述宏的另一种可选形式是 #springBindEscaped / <@spring.bindEscaped> ,它另外接受一个布尔型参数,显式指定了输出值或错误信息这些状态信息时是否使用HTML转码。 附加的表单处理宏简化了HTML转码的使用,只要有可能,你就应该使用它们。关于它们的细节将在下节讲述。

 

14.4.5.3. 表单输入生成宏

 

为这两种语言附加的一些很方便的宏同时简化了表单绑定和表单生成(包括显示校验错误信息)。 不需要使用这些宏来生成表单输入域,它们可以被混杂并匹配到简单HTML,或者直接调用前面讲过的spring绑定宏。

下表展示了可用的宏的VTL定义和FTL定义,以及它们需要的参数。

表 14.1. 宏定义表

macro VTL definition FTL definition
message (输出一个根据code参数选择的资源绑定字符串) #springMessage($code) <@spring.message code/>
messageText (输出一个根据code参数选择的资源绑定字符串,找不到的话输出default参数的值) #springMessageText($code $text) <@spring.messageText code, text/>
url (在URL相对路径前面添加应用上下文根路径application context root) #springUrl($relativeUrl) <@spring.url relativeUrl/>
formInput (标准表单输入域) #springFormInput($path $attributes) <@spring.formInput path, attributes, fieldType/>
formHiddenInput * (表单隐藏输入域) #springFormHiddenInput($path $attributes) <@spring.formHiddenInput path, attributes/>
formPasswordInput *(标准表单密码输入域;注意不会为这种类型的输入域装配数据) #springFormPasswordInput($path $attributes) <@spring.formPasswordInput path, attributes/>
formTextarea (大型文本(自由格式)输入域) #springFormTextarea($path $attributes) <@spring.formTextarea path, attributes/>
formSingleSelect (单选列表框) #springFormSingleSelect( $path $options $attributes) <@spring.formSingleSelect path, options, attributes/>
formMultiSelect (多选列表框) #springFormMultiSelect($path $options $attributes) <@spring.formMultiSelect path, options, attributes/>
formRadioButtons (单选框) #springFormRadioButtons($path $options $separator $attributes) <@spring.formRadioButtons path, options separator, attributes/>
formCheckboxes (复选框) #springFormCheckboxes($path $options $separator $attributes) <@spring.formCheckboxes path, options, separator, attributes/>
showErrors (简化针对所绑定输入域的校验错误信息输出) #springShowErrors($separator $classOrStyle) <@spring.showErrors separator, classOrStyle/>



* 在FTL(FreeMarker)中,这二种宏实际上并不是必需的,因为你可以使用普通的 formInput 宏,指定fieldType 参数的值为 'hidden ' 或 'password '即可 。

上面列出的所有宏的参数都具有一致的含义,如下述:

  • path:待绑定属性的名字(如:command.name)

  • 选项:一个Map,其中保存了所有可从输入域中选择的值。map中的键值(keys)代表将从表单绑定到命令对象然后提交到后台的实值(values)。 存储在Map中的与相应键值对应的对象就是那些在表单上显示给用户的标签,它们可能与提交到后台的值不同。通常这样的map由控制器以引用数据的方式提 供。你可以根据需求的行为选择一种Map实现。比如对顺序要求严格时,可使用一个 SortedMap ,如一个TreeMap 加上适当的Comparator;对要求按插入顺序返回的情况,可以使用commons-collections提供的 LinkedHashMapLinkedMap

  • 分隔符:当使用多选的时候(radio buttons 或者 checkboxes),用于在列表中分隔彼此的字符序列(如 "<br>")。

  • 属性:一个附加的以任意标签或文本构成的字符串,出现在HTML标签内。该字符串被宏照原样输出。例如:在一个textarea标签内你可能会提供 'rows="5" cols="60"'这样的属性,或者你会传递'style="border:1px solid silver"'这样的样式信息。

  • classOrStyle:供showErrors宏用来以这种样式显示错误信息,其中错误信息嵌套于使用该CSS类名的span标签内。如果不提供或内 容为空,则错误信息嵌套于<b></b>标签内。

 

宏的例子在下面描述,其中一些是FTL的,一些是VTL的。两种语言之间的用法差别在旁注中解释。

14.4.5.3.1. 输入域

 

 

       <!-- 上面提到的Name域的例子,使用VTL中定义的表单宏 -->
       ... Name: #springFormInput("command.name"
       "")<br> #springShowErrors("<br>"
       "")<br>
      

 

formInput宏接受一个path参数(command.name)和一个附加的属性参数(在上例中为空)。该宏与所有其他表单生成宏一样,对 path参数代表的属性实施一种隐式绑定,这种绑定保持有效状态直到一次新的绑定开始,所以showErrors宏不再需要传递path参数——它简单地 操作最近一次绑定的属性(field)。

showErrors宏接受两个参数:分隔符(用于分隔多条错误信息的字符串)和CSS类名或样式属性。注意在FreeMarker中可以为属性参数指定 默认值(这点儿Velocity做不到)。上面的两个宏调用在FTL中可以这么表达:

      <@spring.formInput "command.name"/>
      <@spring.showErrors "<br>"/>
     

上面展示的用于生成name表单输入域的代码片断产生的输出如下,同时还显示了输入值为空的情况下提交表单后产生的校验错误信息(校验过程由Spring 的验证框架提供)。

生成的HTML如下:

      Name: <input type="text" name="name" value=""
      > <br> <b>required</b>
      <br> <br>
     

参数(属性)用来向textarea传递样式信息或行列数属性。

 

14.4.5.3.2. 选择输入域

 

有四种用于在HTML表单中生成通用选择输入框的宏。

  • formSingleSelect

  • formMultiSelect

  • formRadioButtons

  • formCheckboxes

 

每个宏都将接受一个由选项值和选项标签的集合构成的Map,其中选项值和其标签可以相同。

下面展示了一个在FTL中使用radio按钮的例子。表单支撑对象(form backing object)提供了一个默认值'London',所以该域不需要校验。当渲染表单时,整个待展现的城市列表由模型对象的'cityMap'属性以引用数 据的方式提供。

      ... Town: <@spring.formRadioButtons
      "command.address.town", cityMap, ""
      /><br><br>
     

这将产生一行radio按钮—— cityMap 中一个值对应一个按钮,并以""分隔。没有额外的属性,因为宏的最后一个参数不存在。cityMap中所有的key-value都使用String类型 值。map中的key用作输入域的值(将被作为请求参数值提交到后台),value用作显示给用户的标签。上述示例中,表单支撑对象提供了一个默认值以及 三个著名城市作为可选值,它产生的HTML代码如下:

      Town: <input type="radio" name="address.town"
      value="London"> London <input type="radio"
      name="address.town" value="Paris"
      checked="spring.framework.ecked"> Paris <input
      type="radio" name="address.town" value="New
      York"> New York
     

如果你希望在应用中按照内部代码来处理城市,你得以适当的键值创建map,如下:

      protected Map referenceData(HttpServletRequest
      request) throws Exception { Map cityMap = new
      LinkedHashMap(); cityMap.put("LDN", "London");
      cityMap.put("PRS", "Paris"); cityMap.put("NYC",
      "New York");
      Map m = new HashMap(); m.put("cityMap",
      cityMap); return m; }
     

现在上述代码将产生出以相关代码为值的radio按钮,同时你的用户仍能看到对他们显示友好的城市名。

      Town: <input type="radio" name="address.town"
      value="LDN"> London <input type="radio"
      name="address.town" value="PRS"
      checked="spring.framework.ecked"> Paris <input
      type="radio" name="address.town" value="NYC">
      New York
     


14.4.5.4. 重载HTML转码行为并使你的标签符合XHTML

 

缺省情况下使用上面这些宏将产生符合HTML 4.01标准的标签,并且Spring的绑定支持使用web.xml中定义的HTML转码行为。为了产生符合XHTML标准的标签以及覆盖默认的HTML 转码行为,你可以在你的模板(或者模板可见的模型对象)中指定两个变量。在模板中指定的好处是稍后的模板处理中可以为表单中不同的域指定不同的行为。

要切换到符合XHTML的输出,你可以设置model/context变量xhtmlCompliant的值为true:

     ## for Velocity.. #set($springXhtmlCompliant = true)
     <#-- for FreeMarker --> <#assign
     xhtmlCompliant = true in spring>
    

在进行完这些处理之后,由Spring宏产生的所有标签都符合XHTML标准了。

类似地,可以为每个输入域指定HTML转码行为:

     <#-- 该句覆盖默认HTML转码行为 -->
     <#assign htmlEscape = true in spring> <#--
     next field will use HTML escaping -->
     <@spring.formInput "command.name" />
     <#assign htmlEscape = false in spring> <#--
     all future fields will be bound with HTML escaping
     off -->
    
分享到:
评论

相关推荐

    velocity开发必备(中文指南+精通Velociy)

    5. **与其他框架的集成**:展示了Velocity如何与Spring、Struts等Java Web框架协同工作,以及在非Web环境中如邮件生成、XML处理的应用。 6. **社区与资源**:提供了Velocity社区的信息,包括邮件列表、文档和API,...

    javaWeb应用开发之velocity模板使用

    velociy模板引擎介绍,使用example,demo。开发教程。

    分子动力学模拟方法概述

    Gear算法可以处理非线性常微分方程,Velociy-Verlet算法则可以同时得到粒子的位置、速度与加速度,保持计算精度的同时提供了速度的显式表达式。 在分子动力学模拟中,还要考虑宏观可观测量的提取,如温度、压力、热...

    一个采用MVC架构设计、Java实现的泡泡堂游戏。.zip

    一个采用MVC架构设计、Java实现的泡泡堂游戏。zip是一个基于Java语言开发的项目,旨在通过实践帮助初学者理解MVC(Model-View-Controller)设计模式在游戏开发中的应用。该项目不仅涵盖了游戏逻辑和用户交互,还注重代码结构和可维护性。项目的核心是MVC架构,它将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。模型负责处理数据和业务逻辑,视图负责展示数据,控制器则作为两者之间的桥梁,处理用户输入并更新视图。这种设计模式有助于提高代码的可读性和可维护性,同时也使得项目的扩展和修改变得更加容易。该资源适合初学者学习,因为它的难度适中,功能清晰。通过这个项目,开发者可以深化对Java语言的理解,掌握MVC模式的应用,同时提升在游戏开发方面的能力。此外,项目源代码是公开的,初学者可以直接下载使用,查看源代码,理解项目的实现方式,也可以在此基础上进行修改和扩展,以进一步提高自己的编程技能。总之,“一个采用MVC架构设计、Java实现的泡泡堂游戏.zip”是一个宝贵的学习资源,它为初学者提供了一个实践平台,帮助他们在游戏开发中学习和成长。

    基于java的坦克大战游戏.zip

    基于Java的坦克大战游戏是一款经典的射击类游戏,通过Java编程语言实现。这款游戏不仅涵盖了面向对象编程、多线程处理和图形绘制等关键技术,还运用了Socket进行客户端与服务器端的通信,使玩家能够通过网络进行对战。游戏中,玩家需要操纵坦克守卫基地,同时尽可能摧毁敌方坦克,并有机会获得超级武器来提升坦克属性。其丰富的功能模块和高度互动性,使其成为学习和实践Java编程技术的优秀资源。

    原版apsw-3.39.4.0-cp311-cp311-win_arm64.whl-下载即用直接pip安装.zip

    安装前的准备 1、安装Python:确保你的计算机上已经安装了Python。你可以在命令行中输入python --version或python3 --version来检查是否已安装以及安装的版本。 个人建议:在anaconda中自建不同python版本的环境,方法如下(其他版本照葫芦画瓢): 比如创建python3.8环境,anaconda命令终端输入:conda create -n py38 python==3.8 2、安装pip:pip是Python的包管理工具,用于安装和管理Python包。你可以通过输入pip --version或pip3 --version来检查pip是否已安装。 安装WHL安装包 1、打开命令行(或打开anaconda命令行终端): 在Windows上,你可以搜索“cmd”或“命令提示符”并打开它。 在macOS或Linux上,你可以打开“终端”。 2、cd到whl文件所在目录安装: 使用cd命令导航到你下载的whl文件所在的文件夹。 终端输入:pip install xxx.whl安装即可(xxx.whl指的是csdn下载解压出来的whl) 3、等待安装完成: 命令行会显示安装进度,并在安装完成后返回提示符。 以上是简单安装介绍,小白也能会,简单好用,从此再也不怕下载安装超时问题。 使用过程遇到问题可以私信,我可以帮你解决! 收起

    钢材表面缺陷检测数据集

    钢材表面缺陷检测数据集是一个专门针对钢材表面缺陷检测的深度学习训练与测试资源。这个数据集的创建旨在推动钢铁工业中自动化检测技术的发展,提高生产效率和产品质量。它包含了大量经过精心标注的真实钢材图像,用于训练和验证深度学习模型,特别是针对目标检测任务的算法,如YOLO(You Only Look Once)。 一、表面缺陷检测的重要性: 在钢铁制造过程中,表面缺陷可能会影响材料的性能和寿命,甚至导致结构的失效。因此,及时、准确地检测出这些缺陷至关重要。传统的检测方法依赖于人工视觉检查,成本高且易受主观因素影响。随着机器学习和深度学习技术的进步,自动化检测已成为解决这一问题的有效途径。 二、深度学习在表面缺陷检测中的应用: 1. YOLO(You Only Look Once):YOLO是一种实时的目标检测系统,以其快速的检测速度和相对较高的准确性而受到广泛关注。在NEU-DET数据集中,YOLO可以被训练来识别并定位钢材表面的缺陷,如裂纹、锈斑、凹痕等。 2. 特征提取:深度学习模型,如卷积神经网络(CNN),能自动从图像中学习高级特征,这对于识别复杂的表面缺

    基于java的微信小程序健身房私教预约系统答辩PPT.pptx

    基于java的微信小程序健身房私教预约系统答辩PPT.pptx

    astropy-5.0.4-cp310-cp310-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    基于java的微信小程序中国剪纸微信小程序的设计与实现答辩PPT.pptx

    基于java的微信小程序中国剪纸微信小程序的设计与实现答辩PPT.pptx

    VB程序实例-保存窗口设置.zip

    基于VB的程序实例,可供参考学习使用

    基于java的微信小程序微信平台签到系统的设计与实现答辩PPT.pptx

    基于java的微信小程序微信平台签到系统的设计与实现答辩PPT.pptx

    astropy-4.2-cp36-cp36m-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    aggdraw-1.3.14-cp38-cp38-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    兔兔答题源码 在线答题神器 一款前后端开源的移动端答题系统.zip

    依赖包安装 由于node的包非常大,所以提供源代码的时候就不提供第三方的依赖包,需要自己安装。在项目目录下执行npm i即可安装。 1、PHP的版本必须在8.2x,至于更高的版本,例如8.3x版本以及更高,系统还未完全测试过,生产环境不建议直接使用。 2、MySQL的版本必须是>= 5.7.x的版本,低于5.7.0的版本100%是无法使用的。 3、Redis的版本没有过多的要求,不过推荐使用7.0以及更高的版本。 4、管理端使用的Vue3的版本开发,同时使用了Element Plus的版本, 所以需要使用Node.js的版本推荐是>= 16.x的版本。同时推荐生产环境,编译打包成静态文件运行。 安装教程: 域名配置,打开utils目录下的request.js文件,按照文件说明配置实际的API地址。 App.vue里面的examUpdateTemplateId改成自己的微信小程序订阅模板id。 代码中有涉及到开发者的二维码图片,根据不同的地方替换成自己即可。 小程序配置,找到manifest.json文件,将下面的appid改成你自己的小程序appid。 “mp-we

    JSP基于SSM小区物业管理系统毕业源码案例设计.zip

    JSP基于SSM小区物业管理系统毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    VB程序实例-程序菜单的隐藏&显示.zip

    基于VB的程序实例,可供参考学习使用

    基于Java实现的黄金矿工小游戏.zip

    本资源是一个基于Java实现的黄金矿工小游戏项目,旨在帮助初学者通过实践巩固Java编程知识。游戏包含多个功能模块,如窗口绘制、图片绘制、红线摇摆及抓取判定等,并采用双缓存技术解决画面闪动问题。此外,还实现了金块和石块的随机生成与抓取机制、积分设置、关卡设置以及商店购物等功能。本项目适合刚入门或有一定基础的Java学习者,通过完成这个项目,可以提升面向对象编程的理解和应用能力,同时增强对Java基础知识的掌握。

    盒子模型及盒子布局中的

    清除默认样式

    基于java的社区文化宣传网站答辩PPT.pptx

    基于java的社区文化宣传网站答辩PPT.pptx

Global site tag (gtag.js) - Google Analytics