JSF Chapter02

1. 配置 RichFaces



1) 添加 lib 到 CLASSPATH

• richfaces-api-3.2.x.jar

• richfaces-impl-3.2.x.jar

• richfaces-ui-3.2.x.jar



2) 配置 web.xml 文件

• 主要是添加 ajax4jsf 的 Filter

<filter>

<display-name>RichFaces Filter</display-name>

<filter-name>richfaces</filter-name>

<filter-class>org.ajax4jsf.Filter</filter-class>

</filter>



<filter-mapping>

<filter-name>richfaces</filter-name>

<servlet-name>Faces Servlet</servlet-name>

<dispatcher>REQUEST</dispatcher>

<dispatcher>FORWARD</dispatcher>

<dispatcher>INCLUDE</dispatcher>

</filter-mapping>



• 可以选择性的设置 SKIN 参数

<context-param>

<param-name>org.richfaces.SKIN</param-name>

<param-value>blueSky</param-value>

</context-param>



3) 在页面中添加 taglib 声明

<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>

<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>





2. 部分页面更新( Partial-Page Update )


指定的控件将会在 Server 上被 render 出来, Browser 接收到 response ,一部分页面就会被更新。换句话说,就是一部分 DOM 会被更新。





3. 使用 <a4j:support>



1) onkeyup 事件是标准的 DHTML 事件



2) 如何使用 < a4j:support>

• <a4j:support> 可以添加到任何标准 JSF 控件内部 ;

• 将 <a4j:support> 作为 Child 控件添加到 JSF 控件内 , 并指定一个将要触发 request 的 DHTML 事件 , 比如 onkeyup ;

• 用 actionListener 属性指定 ActionListener (方法)来应对 DHTML 事件;

• reRender 属性用来指定哪些控件将要被更新。



在这种情况下,每次 onkeyup 事件都会触发一次 Ajax Request 。 Server 得到 Request ,进入正常的 JSF 生命周期。然后 Ajax 得到 Response 并刷新部分页面。



【注意】

对于通常的 <f:message> ,如果不做特别操作,即使把这个 <f:message> 的 ID 加入触发 Ajax Request 的控件的 reRender 属性,当验证出错的时候, <f:message> 也不会被刷新到页面上来。

原因在于, Ajax Request 是根据 ID 在 DOM Tree 中查找控件位置,进行部分刷新的。当第一次载入页面的时候,因为没有错误信息,所以 <f:message> 不会被 render 。但当 Ajax Request 提交的值验证失败产生错误信息的时候, Server 发回的 Response 被 Ajax 接收到, Ajax 按照 ID 去查找控件的 DOM Tree 位置。这是它将无法定位 <f:message> ,因而也就无法刷新出来了。

解决办法有两种:

• 将 <f:message> 放在 <h:panelGroup> 或 <a4j:outputPanel> 中,将 <h:panelGroup> 或 <a4j:outputPanel> 的 ID 放到触发 Ajax Request 的控件的 reRender 中。

• 直接使用 <rich:message> 以代替 <f:message> , <rich:message> 实际上就是将 <f:message> 放进 <a4j:outputPanel ajaxRendered=”true”> 中( <a4j:outputPanel ajaxRendered=”true”> 中的控件总是会被刷新的)。





4. 使用 <a4j:log>



将 <a4j:log> 加入页面,当运行时按下 Ctrl+Shift+L 的时候会弹出一个信息页面窗口,根据你的操作,会自动刷新出 Debug 信息。

可以更改热键,比如: <a4j:log hotkey="D"/>
[color=red]from:http://blog.youkuaiyun.com/gengv/archive/2009/06/05/4246303.aspx[/color]
【前端基础篇】HTML5 + CSS3 入门知识 ,HTML5和CSS3核心知识 阅读详情

相关推荐

Veeam Backup & ONE download

前言 Veeam® Availability Suite™ 是 Veeam 的旗舰解决方案,可实现简单、灵活和可靠的数据管理。消除与数据保护、恢复、监控、勒索软件防护和合规性相关的手动流程,从而减轻数据维护压力。Veeam 能够帮助您节省时间和成本,同时支持您减少在备份方面花费的时间,将更多精力放在推动业务发展上。 Veeam Availability Suite Release 版本 包含 发布时间 复制磁力链接使用迅雷或者bittorrent ...

极致,细节 1997

Practical_RichFaces要点Chapter02

1. 配置 RichFaces 1) 添加 lib 到 CLASSPATH • richfaces-api-3.2.x.jar • richfaces-impl-3.2.x.jar • richfaces-ui-3.2.x.jar 2) 配置 web.xml 文件 • 主要是添加 aja...

飞到大连 148

Hifiasm参数调优实战:当N50不理想时的7个排查方向与解决方案

本文详细解析了Hifiasm参数调优实战,针对基因组组装中N50不理想的7个排查方向与解决方案。通过调整--hom-cov、-D、-N等核心参数,结合HiFi数据和参考基因组分析,有效提升组装质量。文章以猪毛菜基因组为例,展示了从2.1MB到4.3MB的N50优化过程,为生物信息学研究者提供实用指南。

weixin_30642561的博客 425

JSF 文档参考

A4J 用户指南 目录 1. 介绍2. 开始使用Ajax4jsf 环境需求下载Ajax4jsf安装简单的 AJAX Echo 项目 JSP 页面数据 Beanfaces-config.xmlWeb.xml部署 3.  Ajax4jsf 框架的基本概念 介绍结构概览如何做... 发送一个AJAX 请求决定发送什么决定改变什么 4. Ajax4JSF 组件库 a4j:aja

帮助别人,就是帮助自己的过去 3723

从零到一:Halcon手眼标定的实战避坑指南

本文详细解析了Halcon手眼标定的完整流程,重点介绍了Eye-in-Hand和Eye-to-Hand两种模式的实操技巧与常见陷阱。通过九点法、N点法等实战案例,提供硬件配置检查、数据采集策略及误差修正方案,帮助开发者提升机械臂与视觉系统的协同精度,适用于工业自动化领域的精准定位与抓取任务。

neovim7hacker的博客 234

忘记安卓锁屏密码怎么办?3种方法教你用ADB恢复访问(含gesture.key解密)

本文详细解析了安卓设备锁屏密码的存储与加密机制,特别是gesture.key文件的解密原理。针对遗忘密码的常见问题,提供了三种核心恢复方法:利用ADB调试接口删除密码文件、对gesture.key进行离线分析与解密,以及应对高版本系统的替代方案。重点介绍了通过ADB工具在Recovery模式下操作的具体步骤,帮助用户在合法合规前提下恢复设备访问权限。

php55的博客 955

JSF笔记 – JSF中的三大核心组件 UI标签的详细介绍和使用举例

JSF提供了大量的UI标签来简化创建视图。这些UI标签类似于ASP.NET中的服务器组件。使用这些标签,可以通过其value,binding,action,actionListener等属性直接绑定到托管Bean的属性,实例或者方法上。 1、JSF中的三大核心组件: a、 JSF容器管理的托管Bean b、 JSF提供的UI标签,应用界面的UI标签直接绑定到托管Bean c、 页面导航规则

丶季末筅森的专栏 5968

YOLOv11 改进 - 即插即用 | PST金字塔稀疏Transformer:粗粒度到细粒度推理优化特征提取,提升复杂场景适应性

本文介绍了金字塔稀疏 Transformer(PST)与 YOLOv11 的结合。主流基于注意力的特征融合方法计算复杂度高、实现难度大,作者提出 PST 模块,融合粗到细令牌选择与共享注意力参数机制,在保留空间细节的同时降低计算量。该模块通过层级化注意力机制、动态令牌选择与参数共享,实现高效多尺度特征融合

魔改工程师的博客 830

JSF标签之数据表h:dataTable

以下代码可以在我的资源中下载 JavaServer Faces核心编程(第3版)源码@ManagedBean @SessionScoped public class TableData { private static final Name[] names = new Name[] { new Name("William", "Dupont"),

CherishL_的专栏 9369

移动支付APP(仿支付宝)

Toast.makeText(PayActivity.this, "支付失败:" + payResponse.getMsg(), Toast.LENGTH_SHORT).show();Toast.makeText(PayActivity.this, "支付失败:" + t.getMessage(), Toast.LENGTH_SHORT).show();Toast.makeText(PayActivity.this, "支付失败", Toast.LENGTH_SHORT).show();

寒寒豆豆软件公司的博客 134

14、利用Helm和GitOps实现Kubernetes资源管理与CI/CD流程优化

本文介绍了如何结合Helm、GitOps和Terraform等工具,优化Kubernetes资源管理和CI/CD流程。内容涵盖了Helm提供程序的配置、GitOps的核心理念、CI/CD管道的构建与测试策略、GitHub源代码管理模型以及流程优化建议,旨在提升软件开发和部署的效率与质量。

y7z8a9的博客 154

JSF和JSP是新的搭档

Java在最近几年逐渐升温,随着Java SE 5和Java SE 6的推出,Java的未来更显得无比辉煌。但以Java为基础的JSP在Java SE 5推出之前却一直抬不起头来,这最重要的原因就是JSP虽然功能十分强大,但最大的优点也是它的最大缺点,功能强大就意味着复杂,尤其是设计前端界面的可视化工具不多,也不够强大。因此,设计JSP页面就变得十分复杂和繁琐... Java在最近几年逐渐升...

ailin52591314的博客 292

红米k60 修复“NV损坏” 去除主板校验电阻步骤解析与图示

红米k60 基带代码:mondrian。搭载‌高通骁龙8+ Gen1处理器.国外版本称:POCO F5 Pro适用于以下型号的小米机型:23013RK75C, 23013PC75G。 💝💝💝通过博文了解 1💝💝💝-----此机型修复NV损坏硬件类操作主板图示 2💝💝💝-----了解设备出现NV损坏的底层逻辑 3💝💝💝 ------具体修改步骤

小马哥的专栏 391

JSF技术介绍(JavaServer Faces Technology:chapter 9)《注:未完成》

    JavaServer Faces(以下简称JSF)技术是基于java技术Web应用的服务器端用户界面组件框架。    JSF技术的主要组件有以下:   代表用户界面(以下简称UI)组件并且能管理其状态的API,处理事件,服务器端数据验证,数据转换,定义页面导航,支持国际化和易访问,并且对这些功能提供可扩展的能力。 两种

shinepang的专栏 2542

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

JSF Chapter05

1. a4j: 提供了页面级的 Ajax 支持,也就是框架级的基本控制; rich: 提供了控件级的 Ajax 支持、布局控件以及客户端控件。 2. 使用 1) defaultLabel 属性,可以点击该属性以编辑控件的值; 2) 对于控件值的修改只是在 Browser 上的行为,不会向 Server 传...

e家 182

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

JSF Chapter01

1. JSF’s View = UIComponent + Renderer 2. 验证只在 rendered 设置为 true 的时候才会发生。 3. JSF 是基于 Server-Side 的,所有的事件处理都在 Server 上完成。 Browser 可以被认为仅仅是一个 Component Tree 的映像,或者被认为是 Comp...

e家 126

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

在JSP页面中应用JSF技术(Using JavaServer Faces Technology in JSP Pages chapter10)《注:未完成》

在JSP页面中应用JSF技术 页面作者的职责是设计JSF应用的页面。这包含在页面上如何布置组件,并把他们和后台beans,验证器,转换器和其他服务器端对象关联起来。这一章用Duke的书店这个应用和Coffee Break应用(see Chapter 37) 来介绍页面作者如何应用JSF标签来: 页面上的布局标准UI组件 引用本地化

shinepang的专栏 1986

JSF Chapter10

. 1) 也是一个 dataTable 类的控件。不过,它提供了一些额外的附加功能: l 当表格滚动时,通过 Ajax 从 Server 取得数据行; l 可以一次性选中多个行; l 可以任意调整列的宽度; l 可以设定冻结列; l 可以轻易的实现排序; 2) ...

e家 160

Ajax4jsf User Guide Chapter 3.Ajax4jsf 框架中的基本概念

该框架被实现为使用一个组件库来添加ajax功能到你的页面中,而不要写js代码或者使用新的Ajax装饰器替换你已经做好的JSF组件. Ajax4jsf 具有页面范围(page-wide)的Ajax支持,而不是传统的组件范围(component-wide)的ajax支持.  这意味着你可以在页面中定义一个激活Ajax请求的事件,和当根据客户端事件触发Ajax请求来改变服务器端数据后 如何使用JSF组件...

hintcnuie 212

JSF : Variables for implicit JSF EL objects

OReilly.JavaServer.Faces CHAPTER 6.2.1 Table 6-2. Variables for implicit JSF EL objects

winnerbao的专栏 789

JSF Chapter04

. 用队列控制 Event Traffic 1) 以下两个属性用来避免由频繁的 DHTML 事件所引发大量的 request 请求。 · eventsQueue · requestDelay 2) 对于能够引发 Ajax Request 的 4 种控件来说,以上两种属性都是可用的。 3) eventQue...

e家 159

JSF Chapter03

本章主要包括三方面内容: · 发送 Ajax Request · 实现 Partial-Page 更新 · 了解什么数据将会被 process 1. 发送 Ajax Request 1) 四个 RichFaces 控件可以发送 Ajax Request 并允许 Partial-Page 更新 • ...

e家 126

JSF Chapter08

1. 1) 实际上,这个控件与 和 本质上是一样的,都允许选择一到多个值,存于 List 中。 2) 可以使用 和 为其添加选项,这些选项会显示在左侧框体里; 【注意】 l 当 SelectItem 的值是自定义类对象的时候,应该为其创建自定义 Converter ,并 Override 该自定义类的 e...

e家 173

JSF Chapter09

1. 1) 生成下拉菜单。 2) 每一个 menu item 都可以设定 action 或 actionListener 以供 Ajax 调用。 reRender 属性定义需要被刷新的控件。 3) 是装载下拉菜单的容器。 4) 不提供其自己的 form ,所以必须置于 form 里才能使用。 5) ...

e家 154

JSF Chapter07

1. 常用的 dataTable 类的控件有: l l l l l 2. 1) 具有 的所有基本功能,此外还具有换肤、部分行刷新、合并行或列的功能。 2) ...

e家 173

应用JSF技术开发(Developing with JavaServer Faces Technology:chapter11)《注:未完成》

应用JSF技术开发 Chapter 10 演示了页面作者可以通过页面上的组件标签和core标签将组件和服务器端对象绑定。应用开发者的职责就是编写JSF应用的服务器端对象。这些对象包括后台beans,转换器,事件处理和验证器。这一章用Duke的书店应用(see The Example JavaServer Faces Application, page 308)讲解应用开发者的职责包括:

shinepang的专栏 1473
上一篇: JSF Chapter01
下一篇: JSF Chapter03
wang2222
博客等级 码龄19年 0粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值