翻译自 Waqas Anwar 2021年3月28日的文章 《Communication between Blazor Components using EventCallback》
Blazor 应用程序是相互交互的多个 Blazor 组件的集合,我们可以在其他父组件中使用子组件。在实际的应用程序中,将数据或事件信息从一个组件传递到另一组件是一种十分常见的场景。您可能会有一个页面,其中一个组件中发生的用户操作需要更新其他组件中的某些 UI。通常使用 EventCallback 委托来处理这种类型的通信。在本教程中,我将介绍如何使用 EventCallback 在父组件和子组件之间进行通信。
下面是使用 EventCallback 从子组件到父组件进行通信所涉及的通用步骤。
在子组件中声明一个 EventCallback
或 EventCallback
委托
在父组件中附加一个到子组件的 EventCallback
或 EventCallback
的回调方法
当子组件想要与父组件通信时,可以使用以下方法之一调用父组件的回调方法。
InvokeAsync(Object) – 如果使用的是 EventCallback
InvokeAsync(T) – 如果使用的是 EventCallback
为了理解上述步骤,让我们创建一个简单的待办事项列表(To Do List)示例。首先,在 Data 文件夹中创建以下 ToDo.cs 类。这是一个简单类,用于存储每个待办事项的 Title 和 Minutes 属性。Minutes 属性指定完成特定待办事项所需的时间。
ToDo.cs
public class ToDo
{
public string Title { get ; set ; }
public int Minutes { get ; set ; }
}
在项目中添加以下 ToDoList.razor 组件,并在其中编写以下代码:
ToDoList.razor
@page "/todos"
@using BlazorEventHandlingDemo.Data
< div class = " row" >
< div class = " col" > < h3> To Do List h3> div>
< div class = " col" > < h5 class = " float-right" > Total Minutes: @TotalMinutes h5> div>
div>
< br />
< table class = " table" >
< tr>
< th> Title th>
< th> Minutes th>
< th> th>
tr>
@foreach (var todo in ToDos)
{
< ToDoItem Item = " todo" />
}
table>
@code {
public List< ToDo> ToDos { get; set; }
public int TotalMinutes { get; set; }
protected override void OnInitialized()
{
ToDos = new List< ToDo> ()
{
new ToDo() { Title = "Analysis", Minutes = 40 },
new ToDo() { Title = "Design", Minutes = 30 },
new ToDo() { Title = "Implementation", Minutes = 75 },
new ToDo() { Title = "Testing", Minutes = 40 }
};
UpdateTotalMinutes();
}
public void UpdateTotalMinutes()
{
TotalMinutes = ToDos.Sum(x => x.Minutes);
}
}
在上面的 @code 代码块中,我们声明了两个属性 ToDos 和 TotalMinutes 。 其中 ToDos 属性存储待办事项的列表,TotalMinutes 存储所有待办事项花费分钟数的总和。
public List< ToDo> ToDos { get ; set ; }
public int TotalMinutes { get ; set ; }
接下来,我们在 Blazor 组件生命周期方法之一的名为 OnInitialized 的方法中使用一些待办事项对象来初始化我们的 ToDos 列表。我们还调用了 UpdateTotalMinutes 方法,该方法简单地计算 ToDos 列表中所有 ToDo 对象的 Minutes 属性的总和。
protected override void OnInitialized ( )
{
ToDos = new List< ToDo> ( )
{
new ToDo ( ) { Title = "Analysis" , Minutes = 40 } ,
new ToDo ( ) { Title = "Design" , Minutes = 30 } ,
new ToDo ( ) { Title = "Implementation" , Minutes = 75 } ,
new ToDo ( ) { Title = "Testing" , Minutes = 40 }
} ;
UpdateTotalMinutes ( ) ;
}
HTML 代码也非常简单,我们将 TotalMinutes 属性显示在带有页面标题的页面顶部。
< h5 class = " float-right" > Total Minutes: @TotalMinutes h5>
我们还在页面上生成了一个 HTML 表格,接下来的 foreach 循环遍历 ToDos 列表并渲染一个名为 ToDoItem 的子组件,我们还使用其 Item 属性将每个 ToDo 对象传入子组件中。
@foreach ( var todo in ToDos)
{
< ToDoItem Item= "todo" / >
}
让我们在 Shared 文件夹中创建一个子组件 ToDoItem.razor 并在其中添加以下代码。该子组件有一个 Item 属性(我们在父组件的 foreach 循环中设置了此属性)。该子组件简单地使用 元素生成一个表格行,并在表格单元格中显示 Title 和 Minutes 属性。
ToDoItem.razor
@using BlazorEventHandlingDemo.Data
< tr>
< td> @Item.Title td>
< td> @Item.Minutes td>
< td>
< button type = " button" class = " btn btn-success btn-sm float-right" >
+ Add Minutes
button>
td>
tr>
@code {
[Parameter]
public ToDo Item { get; set; }
}
运行该应用程序,您会看到一个类似于如下内容的页面:
如果此时您点击子组件中的 Add Minutes 按钮,则不会有任何反应,因为我们还没有将 click 事件与 Add Minutes 按钮关联起来。让我们更新一下 Add Minutes 按钮的代码,添加调用 AddMinute 方法的 @onclick 特性。
< button type = " button" class = " btn btn-success btn-sm float-right" @onclick = " AddMinute" >
+ Add Minutes
button>
当用户每次点击 Add Minutes 按钮时,事件处理方法 AddMinute 简单地将 Minutes 属性加 1。
public async Task AddMinute ( MouseEventArgs e)
{
Item. Minutes += 1 ;
}
再次运行应用程序并尝试点击每个待办事项的 Add Minutes 按钮。您将注意到每个待办事项显示的分钟数会增加,但是顶部的总分钟数属性将保持不变。这是由于 TotalMinutes 属性是在父组件中计算的,而父组件并不知道子组件中的 Minutes 属性增加了。
让我们使用上面提到的步骤在我们的示例中改进一下子组件到父组件的通信,以便每次增加子组件中的 Minutes 时,能够相应地更新父组件的 UI。
步骤1:在子组件中声明一个 EventCallback
或 EventCallback
委托
第一步是在我们的子组件中声明 EventCallback
委托。我们声明一个委托 OnMinutesAdded ,并使用 MouseEventArgs 作为 T
,因为它可以为我们提供有关按钮点击事件的额外信息。
[ Parameter ]
public EventCallback< MouseEventArgs> OnMinutesAdded { get ; set ; }
步骤2:在父组件中附加一个到子组件的 EventCallback
或 EventCallback
的回调方法
在这一步中,我们需要向在前面的步骤 1 中声明的子组件的 EventCallback
委托 OnMinutesAdded 附加一个回调方法。
< ToDoItem Item= "todo" OnMinutesAdded= "OnMinutesAddedHandler" / >
在本例中我们使用的回调方法是 OnMinutesAddedHandler ,该方法简单地调用同一个 UpdateTotalMinutes 方法,更新 TotalMinutes 属性。
public void OnMinutesAddedHandler ( MouseEventArgs e)
{
UpdateTotalMinutes ( ) ;
}
步骤3:当子组件需要与父组件通信时,使用 InvokeAsync(Object)
或 InvokeAsync(T)
方法调用父组件的回调方法。
在这一步中,我们需要调用父组件中的回调方法,因为我们希望每次用户点击 Add Minute 按钮时都会更新父组件 UI,所以最好的调用位置是在 AddMinute 方法中。
public async Task AddMinute ( MouseEventArgs e)
{
Item. Minutes += 1 ;
await OnMinutesAdded. InvokeAsync ( e) ;
}
这就是在 Blazor 中实现从子组件到父组件通信我们所要做的所有事情。以下是子组件 ToDoItem.razor 的完整代码:
ToDoItem.razor
@using BlazorEventHandlingDemo.Data
< tr>
< td> @Item.Title td>
< td> @Item.Minutes td>
< td>
< button type = " button" class = " btn btn-success btn-sm float-right" @onclick = " AddMinute" >
+ Add Minutes
button>
td>
tr>
@code {
[Parameter]
public ToDo Item { get; set; }
[Parameter]
public EventCallback< MouseEventArgs> OnMinutesAdded { get; set; }
public async Task AddMinute(MouseEventArgs e)
{
Item.Minutes += 1;
await OnMinutesAdded.InvokeAsync(e);
}
}
以下是父组件 ToDoList.razor 的完整代码:
ToDoList.razor
@page "/todos"
@using BlazorEventHandlingDemo.Data
< div class = " row" >
< div class = " col" > < h3> To Do List h3> div>
< div class = " col" > < h5 class = " float-right" > Total Minutes: @TotalCount h5> div>
div>
< br />
< table class = " table" >
< tr>
< th> Title th>
< th> Minutes th>
< th> th>
tr>
@foreach (var todo in ToDos)
{
< ToDoItem Item = " todo" OnMinutesAdded = " OnMinutesAddedHandler" />
}
table>
@code {
public List< ToDo> ToDos { get; set; }
public int TotalCount { get; set; }
protected override void OnInitialized()
{
ToDos = new List< ToDo> ()
{
new ToDo() { Title = "Analysis", Minutes = 40 },
new ToDo() { Title = "Design", Minutes = 30 },
new ToDo() { Title = "Implementation", Minutes = 75 },
new ToDo() { Title = "Testing", Minutes = 40 }
};
UpdateTotalMinutes();
}
public void UpdateTotalMinutes()
{
TotalCount = ToDos.Sum(x => x.Minutes);
}
public void OnMinutesAddedHandler(MouseEventArgs e)
{
UpdateTotalMinutes();
}
}
在浏览器中运行应用程序,并尝试增加任一待办事项的分钟数,您会注意到父组件将自动地实时更新总分钟数。
相关阅读:
Blazor Server 和 WebAssembly 应用程序入门指南
Blazor 组件入门指南
Blazor 数据绑定开发指南
Blazor 事件处理开发指南
Blazor 组件之间使用 EventCallback 进行通信
Blazor 路由及导航开发指南
作者 : Waqas Anwar 翻译 : 技术译站 链接 : 英文原文
你可能感兴趣的:(Blazor,DotNet,CSharp,Blazor,.net)
两个常用的用于读写和操作DXF文件C#库:netDxf 和 DXF.NET
CoderIsArt
C# 图像与图形处理 c# .net 开发语言
netDxf和DXF.NET是两个常用的C#库,用于读取、写入和操作DXF文件。以下是它们的详细介绍和用法示例。1.netDxf简介netDxf是一个开源的DXF文件读写库,支持AutoCADDXF格式的读取和写入。它支持大多数DXF实体和对象,并且易于使用。GitHub地址:https://github.com/haplokuon/netDxf特点:支持DXF文件的读取和写入。支持多种实体类型(
kubernetes高级实战
云原生的爱好者
kubernetes 容器 云原生
一、模拟企业环境进行一个实战部署[root@masternode]#kubectlapply-fpod-tomcat.yamlpod/tomcat-testcreated[root@masternode]#kubectlgetpodsNAMEREADYSTATUSRESTARTSAGEtomcat-test2/2Running02s[root@masternode]#kubectlgetpods-
netdxf 用法_vb.net 保存成dxf文件
weixin_39913807
netdxf 用法
为按钮添加代码PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimdocAsNewDXFLibrary.Document()DimtablesAsNewDXFLibrary.Tables()doc.SetTables(tables)DimlayersAs
【K8S】ImagePullBackOff状态问题排查。
执键行天涯
K8s kubernetes 容器 云原生
ImagePullBackOff是在使用Kubernetes(K8s)时经常遇到的一种错误状态,下面为你详细介绍其含义、可能的原因及解决办法。含义当你在K8s集群中创建一个Pod时,Kubelet会尝试从指定的镜像仓库拉取所需的容器镜像。如果拉取镜像失败,Kubelet会进行重试。随着重试次数的增加,重试的间隔时间会逐渐变长,这就是所谓的“指数退避”策略。当Kubelet多次尝试拉取镜像都失败后,
应用netdxf(C#)实现dxf文件读写-6、注释和标注
MariaWu2020
C# C# netdxf 参数绘图
实现思路:实例化相应注释类(直线、角度、点延申、半/直径),并加入DxfDocument对象中。1、垂直、线性注释AlignedDimensiondim=newAlignedDimension(ref1,ref2,offset,style);//实例化垂直注释完整范例:DimensionStylestyle=DimensionStyle.Iso25;//标注格式Vector2ref1=Vector
AI编程系列 之Claude 3.5 Sonnet:编码的未来已无限改变! Claude 3.5 Sonnet 即将改变一切!
知识大胖
NVIDIA GPU和大语言模型开发教程 AI编程 信息可视化 claude
简介“编程并不是让你成为一个成功人士的必要条件。”Nvidia首席执行官黄仁勋。正如JensenHuang所说,LLM的最新特点让我们意识到了解编码可能并不像我们想象的那么重要。你知道吗,你可以在2分钟内创建一款贪吃蛇或俄罗斯方块游戏?在本文中,我们将探索Claude3.5Sonnet,你将明白为什么最近每个人都在谈论它。推荐文章《AnythingLLM教程系列之05AnythingLLM允许您创
C语言:setjmp和longjmp函数使用详解
houxiaoni01
C语言 setjmp longjmp
转载自:https://www.runoob.com/cprogramming/c-standard-library-setjmp-h.htmlhttps://blog.csdn.net/chenyiming_1990/article/details/86834131、C标准库-简介setjmp.h头文件定义了宏setjmp()、函数longjmp()和变量类型jmp_buf,该变量类型会绕过正常
消息中间件选型: kafka与rabbitmq的对比
HS_Henry
消息中间件 rabbitmq kafka 消息中间件选型
RabbitMQ总结_陈海龙的格物之路-CSDN博客https://blog.csdn.net/chl87783255/article/details/122606212kafka总结_陈海龙的格物之路-CSDN博客kafka,仅支持拉取的分布式流式平台。本文从简介、使用场景、设计、实现四个方面阐述kafka。https://blog.csdn.net/chl87783255/article/de
python中的类方法,静态方法,对象方法
a174817529
原文地址:http://blog.chinaunix.net/uid-26602509-id-3087296.htmlclassA:count=100def__init__(self,instancedata):self.instancedata=instancedata@staticmethod#静态方法不能访问类参数和实例参数defsm():print"sm"@classmethod#类方法不
从SSL到TLS:密码协议的进化之路
安全
互联网的快速发展对数据传输的安全性提出了更高要求,而密码协议作为网络通信的基石,经历了从SSL(SecureSocketsLayer)到TLS(TransportLayerSecurity)的重大技术革新。这一演进不仅是名称的变更,更代表了加密技术、安全机制与标准化设计的全面提升。1.SSL的起源与早期发展1994年,网景公司(Netscape)推出SSL1.0,旨在为HTTP协议提供加密支持,但
u-net系列算法
㡽闧㔯
人工智能 算法
语义分割M整体结构:M概述就是编码解码过程简单但是很实用,应用广起初是做医学方向,现在也是U-net主要网络结构:还引入了特征拼接操作M以前我们都是加法,现在全都要这么简单的结构就能把分割任务做好U-net++整体网络结构:特征融合,拼接更全面其实跟densenet思想一致把能拼能凑的特征全用上就是升级版了U-net++DeepSupervision:也是很常见的事,多输出损失由多个位置计算,再更
helm安装kubernetes-dashboard(2,Linux运维开发技巧
2401_83974783
2024年程序员学习 kubernetes linux 运维开发
当前k8s集群版本1.23.61.1添加repo[root@masterhelm]#helmrepoaddkubernetes-dashboardhttps://kubernetes.github.io/dashboard/[root@masterhelm]#helmsearchrepokubernetes-dashboard/kubernetes-dashboardNAMECHARTVERSIO
k8s服务中userspace,iptables,和ipvs的比较
小刘爱喇石( ˝ᗢ̈˝ )
kubernetes 云原生
在Kubernetes中,kube-proxy是负责实现服务负载均衡的组件。它支持三种代理模式:userspace、iptables和ipvs。这三种模式在性能、功能和复杂性上有所不同。以下是它们的详细比较:1.Userspace模式Userspace是Kubernetes最早支持的代理模式,kube-proxy在用户空间监听服务的IP和端口,并将流量转发到后端Pod。工作原理kube-proxy
Claude 3.7 Sonnet 根据UI设计稿生成前端html页面
徐同保
前端 ui html
UI设计稿:提示词:你是一个前端代码工程师,根据UI设计稿,编写对应html页面,样式写在标签里,类名都以"m-"开头AI回答的结果:根据提供的UI设计稿,我将编写对应的HTML页面,所有类名都以"m-"开头,样式写在标签里。```html账单明细/*重置样式*/*{margin:0;padding:0;box-sizing:border-box;}body{font-family:-apple-
RIP路由欺骗攻击与防御实验详解
w2361734601
智能路由器 网络
一、基础网络配置1.路由器R1配置interfaceGigabitEthernet0/0/0ipaddress192.1.2.254255.255.255.0!interfaceGigabitEthernet0/0/1ipaddress192.1.3.254255.255.255.0!routerrip1version2network192.1.2.0network192.1.3.02.路由器R2
基于AT89C52单片机的智能导盲杖报警设计
七月小卖铺
单片机 单片机 嵌入式硬件
点击链接获取Keil源码与ProjectBackups仿真图:https://download.csdn.net/download/qq_64505944/90498287?spm=1001.2014.3001.5503C+22部分参考设计如下:摘要超声波测距技术因其具有较强的指向性、低能耗、较长的传播距离等优点,已成为广泛应用于各类传感器技术和自动控制技术相结合的测距方案之一。超声波传感器利用声
思科 N9K 交换机密码恢复
m0_54931486
服务器 运维 网络
目录1.命令行界面修改密码2.断电/重启恢复密码*从FTP加载镜像修改admin密码有以下几种方式:通过命令行界面,使用admin权限的用户名进行恢复;对设备进行断电/重启设备恢复。1.命令行界面修改密码1.查看账户switch#showuser-accountuser:adminthisuseraccounthasnoexpirydateroles:network-adminuser:dbgus
Docker Compose 和 Kubernetes(K8s)对比
孽小倩
docker 容器 docker k8s kubernetes
DockerCompose和Kubernetes(K8s)在某些方面有相似的功能,但它们的核心用途和适用场景不同。以下是它们的主要区别和联系:1.DockerCompose和Kubernetes的区别对比项DockerComposeKubernetes(K8s)核心作用管理多个Docker容器管理容器编排(大规模应用)适用环境本地开发、测试环境生产环境、大规模集群容器编排能力基础编排(启动多个容器
【服务器数据恢复】数据中心存储服务器VMware vSAN分布式存储架构数据恢复解析
海境超备
服务器 分布式 架构 网络安全 系统安全 运维
随着企业数据中心的数据量的不断增加,数据存储和恢复成为了企业必须面对的重要问题。vSAN(VirtualStorageAreaNetwork)分布式存储架构是一种新型的存储技术,它可以有效地解决企业数据存储和管理方面的问题。本文将详细介绍vSAN分布式存储架构的原理和特点,并解析其数据恢复的原理和方法。分布式文件系统(DistributedFileSystem,DFS)是一种能够在多台计算机之间共
【人工智能】注意力机制深入理解
问道飞鱼
机器学习与人工智能 人工智能 注意力机制
文章目录**一、注意力机制的核心思想****二、传统序列模型的局限性****三、Transformer与自注意力机制****1.自注意力机制的数学公式****四、注意力机制的关键改进****1.稀疏注意力(SparseAttention)****2.相对位置编码(RelativePositionEncoding)****3.图注意力网络(GraphAttentionNetwork,GAN)****
Transformer与图神经网络的融合与应用
AI天才研究院
DeepSeek R1 & 大数据AI人工智能大模型 AI大模型企业级应用开发实战 计算科学 神经计算 深度学习 神经网络 大数据 人工智能 大型语言模型 AI AGI LLM Java Python 架构设计 Agent RPA
Transformer与图神经网络的融合与应用关键词:Transformer,图神经网络,注意力机制,图结构数据,图表示学习,图分类,图生成1.背景介绍近年来,深度学习技术在各个领域取得了显著的进展。其中,Transformer模型和图神经网络(GraphNeuralNetworks,GNNs)是两个备受关注的研究方向。Transformer最初应用于自然语言处理领域,通过自注意力机制实现了并行计
深度学习的颠覆性发展:从卷积神经网络到Transformer
AI天才研究院
AI大模型应用入门实战与进阶 ChatGPT 大数据 人工智能 语言模型 AI LLM Java Python 架构设计 Agent RPA
1.背景介绍深度学习是人工智能的核心技术之一,它通过模拟人类大脑中的神经网络学习从大数据中抽取知识,从而实现智能化的自动化处理。深度学习的发展历程可以分为以下几个阶段:2006年,GeoffreyHinton等人开始研究卷积神经网络(ConvolutionalNeuralNetworks,CNN),这是深度学习的第一个大突破。CNN主要应用于图像处理和语音识别等领域。2012年,AlexKrizh
openSUSE操作系统搭建使用记录
后青春期的诗go
服务器操作系统实战资料 linux 运维 php
操作系统版本:openSUSE-LEAP-15.0-x86-64一、常规操作基本操作1.查看IP信息ipa2.安装命令格式zypperinstallXXX3.安装使用ifconfig命令zypperinstallnet-tools-deprecated4.开启sshd服务/查看服务状态/设为开机启动systemctlstartsshd/systemctlstatussshd/systemctlen
docker部署nginx+php7.3流程及遇到的坑
匿名用户(192.168.*.*)
linux docker nginx php centos
拉取镜像dockerpullnginx:alpinedockerpullphp:7.3-fpm-alpine创建dockernetwork网络dockernetworkcreatemy_web创建docker容器并拷贝配置文件目录到主机//这一步是为了挂载卷创建主机的挂载目录mkdir~/nginx/{logs,conf.d}创建nginx容器dockerrun-d--rm--namenginxn
Netty源码—2.Reactor线程模型一
东阳马生架构
Netty应用与源码 Netty Reactor线程模型
大纲1.关于NioEventLoop的问题整理2.理解Reactor线程模型主要分三部分3.NioEventLoop的创建4.NioEventLoop的启动1.关于NioEventLoop的问题整理一.默认下Netty服务端起多少线程及何时启动?答:默认是2倍CPU核数个线程。在调用EventExcutor的execute(task)方法时,会判断当前线程是否为Netty的Reactor线程,也就
C1-Week2 Program Assignment: Logistic Regression with a Neural Network mindset
houzhizhen
LogisticRegressionwithaNeuralNetworkmindsetWelcometoyourfirst(required)programmingassignment!Youwillbuildalogisticregressionclassifiertorecognizecats.ThisassignmentwillstepyouthroughhowtodothiswithaNe
论文学习11:Boundary-Guided Camouflaged Object Detection
zl29
学习 目标检测 人工智能
代码来源GitHub-thograce/BGNet:Boundary-GuidedCamouflagedObjectDetection模块作用BGNet利用额外的目标相关边缘语义信息来引导COD任务的特征学习,从而强制模型生成能够突出目标结构的特征。这一机制有助于提高目标边界的精准定位,从而提升伪装目标的检测性能。模块结构BGNet的架构基于Res2Net-50,编码器提取多级特征,解码器通过EA
arp -a命令输出详解
learning-striving
eNSP 网络 智能路由器 路由器 接口 计算机网络 计算机网络
一、arp-a输出C:\WINDOWS\system32>arp-a接口:169.254.199.84---0x2Internet地址物理地址类型169.254.255.255ff-ff-ff-ff-ff-ff静态224.0.0.201-00-5e-00-00-02静态224.0.0.2201-00-5e-00-00-16静态224.0.0.25101-00-5e-00-00-fb静态224.0.
DeepLabv3+改进18:在主干网络中添加REP_BLOCK
AICurator
深度学习 python 机器学习 deeplabv3+ 语义分割
【DeepLabv3+改进专栏!探索语义分割新高度】你是否在为图像分割的精度与效率发愁?本专栏重磅推出:✅独家改进策略:融合注意力机制、轻量化设计与多尺度优化✅即插即用模块:ASPP+升级、解码器PS:订阅专栏提供完整代码论文简介我们提出了一种通用的卷积神经网络(ConvNet)构建模块,可在不增加推理时间成本的情况下提升性能。该模块名为多样化分支块(DBB),通过结合不同尺度和复杂度的多样化分支
Kotlin by属性委托
赵彦军
Kotlin实战指南 kotlin属性委托 kotlin by by委托
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119939781本文出自【赵彦军的博客】文章目录属性委托要求委托原理实战演练,SharedPreference委托升级之旅ReadWriteProperty延迟委托Lazy在Kotlin中,通过by实现属性委托,属性委托是什么意思呢?简单来说,就是属性的set、get的操作,交给另一
ASM系列四 利用Method 组件动态注入方法逻辑
lijingyao8206
字节码技术 jvm AOP 动态代理 ASM
这篇继续结合例子来深入了解下Method组件动态变更方法字节码的实现。通过前面一篇,知道ClassVisitor 的visitMethod()方法可以返回一个MethodVisitor的实例。那么我们也基本可以知道,同ClassVisitor改变类成员一样,MethodVIsistor如果需要改变方法成员,注入逻辑,也可以
java编程思想 --内部类
百合不是茶
java 内部类 匿名内部类
内部类;了解外部类 并能与之通信 内部类写出来的代码更加整洁与优雅
1,内部类的创建 内部类是创建在类中的
package com.wj.InsideClass;
/*
* 内部类的创建
*/
public class CreateInsideClass {
public CreateInsideClass(
web.xml报错
crabdave
web.xml
web.xml报错
The content of element type "web-app" must match "(icon?,display-
name?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,s
泛型类的自定义
麦田的设计者
java android 泛型
为什么要定义泛型类,当类中要操作的引用数据类型不确定的时候。
采用泛型类,完成扩展。
例如有一个学生类
Student{
Student(){
System.out.println("I'm a student.....");
}
}
有一个老师类
CSS清除浮动的4中方法
IT独行者
JavaScript UI css
清除浮动这个问题,做前端的应该再熟悉不过了,咱是个新人,所以还是记个笔记,做个积累,努力学习向大神靠近。CSS清除浮动的方法网上一搜,大概有N多种,用过几种,说下个人感受。
1、结尾处加空div标签 clear:both 1 2 3 4
.div
1
{
background
:
#000080
;
border
:
1px
s
Cygwin使用windows的jdk 配置方法
_wy_
jdk windows cygwin
1.[vim /etc/profile]
JAVA_HOME="/cgydrive/d/Java/jdk1.6.0_43" (windows下jdk路径为D:\Java\jdk1.6.0_43)
PATH="$JAVA_HOME/bin:${PATH}"
CLAS
linux下安装maven
无量
maven linux 安装
Linux下安装maven(转) 1.首先到Maven官网
下载安装文件,目前最新版本为3.0.3,下载文件为
apache-maven-3.0.3-bin.tar.gz,下载可以使用wget命令;
2.进入下载文件夹,找到下载的文件,运行如下命令解压
tar -xvf apache-maven-2.2.1-bin.tar.gz
解压后的文件夹
tomcat的https 配置,syslog-ng配置
aichenglong
tomcat http跳转到https syslong-ng配置 syslog配置
1) tomcat配置https,以及http自动跳转到https的配置
1)TOMCAT_HOME目录下生成密钥(keytool是jdk中的命令)
keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit
关于领号活动总结
alafqq
活动
关于某彩票活动的总结
具体需求,每个用户进活动页面,领取一个号码,1000中的一个;
活动要求
1,随机性,一定要有随机性;
2,最少中奖概率,如果注数为3200注,则最多中4注
3,效率问题,(不能每个人来都产生一个随机数,这样效率不高);
4,支持断电(仍然从下一个开始),重启服务;(存数据库有点大材小用,因此不能存放在数据库)
解决方案
1,事先产生随机数1000个,并打
java数据结构 冒泡排序的遍历与排序
百合不是茶
java
java的冒泡排序是一种简单的排序规则
冒泡排序的原理:
比较两个相邻的数,首先将最大的排在第一个,第二次比较第二个 ,此后一样;
针对所有的元素重复以上的步骤,除了最后一个
例题;将int array[]
JS检查输入框输入的是否是数字的一种校验方法
bijian1013
js
如下是JS检查输入框输入的是否是数字的一种校验方法:
<form method=post target="_blank">
数字:<input type="text" name=num onkeypress="checkNum(this.form)"><br>
</form>
Test注解的两个属性:expected和timeout
bijian1013
java JUnit expected timeout
JUnit4:Test文档中的解释:
The Test annotation supports two optional parameters.
The first, expected, declares that a test method should throw an exception.
If it doesn't throw an exception or if it
[Gson二]继承关系的POJO的反序列化
bit1129
POJO
父类
package inheritance.test2;
import java.util.Map;
public class Model {
private String field1;
private String field2;
private Map<String, String> infoMap
【Spark八十四】Spark零碎知识点记录
bit1129
spark
1. ShuffleMapTask的shuffle数据在什么地方记录到MapOutputTracker中的
ShuffleMapTask的runTask方法负责写数据到shuffle map文件中。当任务执行完成成功,DAGScheduler会收到通知,在DAGScheduler的handleTaskCompletion方法中完成记录到MapOutputTracker中
WAS各种脚本作用大全
ronin47
WAS 脚本
http://www.ibm.com/developerworks/cn/websphere/library/samples/SampleScripts.html
无意中,在WAS官网上发现的各种脚本作用,感觉很有作用,先与各位分享一下
获取下载
这些示例 jacl 和 Jython 脚本可用于在 WebSphere Application Server 的不同版本中自
java-12.求 1+2+3+..n不能使用乘除法、 for 、 while 、 if 、 else 、 switch 、 case 等关键字以及条件判断语句
bylijinnan
switch
借鉴网上的思路,用java实现:
public class NoIfWhile {
/**
* @param args
*
* find x=1+2+3+....n
*/
public static void main(String[] args) {
int n=10;
int re=find(n);
System.o
Netty源码学习-ObjectEncoder和ObjectDecoder
bylijinnan
java netty
Netty中传递对象的思路很直观:
Netty中数据的传递是基于ChannelBuffer(也就是byte[]);
那把对象序列化为字节流,就可以在Netty中传递对象了
相应的从ChannelBuffer恢复对象,就是反序列化的过程
Netty已经封装好ObjectEncoder和ObjectDecoder
先看ObjectEncoder
ObjectEncoder是往外发送
spring 定时任务中cronExpression表达式含义
chicony
cronExpression
一个cron表达式有6个必选的元素和一个可选的元素,各个元素之间是以空格分隔的,从左至右,这些元素的含义如下表所示:
代表含义 是否必须 允许的取值范围 &nb
Nutz配置Jndi
ctrain
JNDI
1、使用JNDI获取指定资源:
var ioc = {
dao : {
type :"org.nutz.dao.impl.NutDao",
args : [ {jndi :"jdbc/dataSource"} ]
}
}
以上方法,仅需要在容器中配置好数据源,注入到NutDao即可.
解决 /bin/sh^M: bad interpreter: No such file or directory
daizj
shell
在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory。
分析:这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。
解决:
1)在windows下转换:
利用一些编辑器如UltraEdit或EditPlus等工具
[转]for 循环为何可恨?
dcj3sjt126com
程序员 读书
Java的闭包(Closure)特征最近成为了一个热门话题。 一些精英正在起草一份议案,要在Java将来的版本中加入闭包特征。 然而,提议中的闭包语法以及语言上的这种扩充受到了众多Java程序员的猛烈抨击。
不久前,出版过数十本编程书籍的大作家Elliotte Rusty Harold发表了对Java中闭包的价值的质疑。 尤其是他问道“for 循环为何可恨?”[http://ju
Android实用小技巧
dcj3sjt126com
android
1、去掉所有Activity界面的标题栏
修改AndroidManifest.xml 在application 标签中添加android:theme="@android:style/Theme.NoTitleBar"
2、去掉所有Activity界面的TitleBar 和StatusBar
修改AndroidManifes
Oracle 复习笔记之序列
eksliang
Oracle 序列 sequence Oracle sequence
转载请出自出处:http://eksliang.iteye.com/blog/2098859
1.序列的作用
序列是用于生成唯一、连续序号的对象
一般用序列来充当数据库表的主键值
2.创建序列语法如下:
create sequence s_emp
start with 1 --开始值
increment by 1 --増长值
maxval
有“品”的程序员
gongmeitao
工作
完美程序员的10种品质
完美程序员的每种品质都有一个范围,这个范围取决于具体的问题和背景。没有能解决所有问题的
完美程序员(至少在我们这个星球上),并且对于特定问题,完美程序员应该具有以下品质:
1. 才智非凡- 能够理解问题、能够用清晰可读的代码翻译并表达想法、善于分析并且逻辑思维能力强
(范围:用简单方式解决复杂问题)
使用KeleyiSQLHelper类进行分页查询
hvt
sql .net C# asp.net hovertree
本文适用于sql server单主键表或者视图进行分页查询,支持多字段排序。KeleyiSQLHelper类的最新代码请到http://hovertree.codeplex.com/SourceControl/latest下载整个解决方案源代码查看。或者直接在线查看类的代码:http://hovertree.codeplex.com/SourceControl/latest#HoverTree.D
SVG 教程 (三)圆形,椭圆,直线
天梯梦
svg
SVG <circle> SVG 圆形 - <circle>
<circle> 标签可用来创建一个圆:
下面是SVG代码:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="100" c
链表栈
luyulong
java 数据结构
public class Node {
private Object object;
private Node next;
public Node() {
this.next = null;
this.object = null;
}
public Object getObject() {
return object;
}
public
基础数据结构和算法十:2-3 search tree
sunwinner
Algorithm 2-3 search tree
Binary search tree works well for a wide variety of applications, but they have poor worst-case performance. Now we introduce a type of binary search tree where costs are guaranteed to be loga
spring配置定时任务
stunizhengjia
spring timer
最近因工作的需要,用到了spring的定时任务的功能,觉得spring还是很智能化的,只需要配置一下配置文件就可以了,在此记录一下,以便以后用到:
//------------------------定时任务调用的方法------------------------------
/**
* 存储过程定时器
*/
publi
ITeye 8月技术图书有奖试读获奖名单公布
ITeye管理员
活动
ITeye携手博文视点举办的8月技术图书有奖试读活动已圆满结束,非常感谢广大用户对本次活动的关注与参与。
8月试读活动回顾:
http://webmaster.iteye.com/blog/2102830
本次技术图书试读活动的优秀奖获奖名单及相应作品如下(优秀文章有很多,但名额有限,没获奖并不代表不优秀):
《跨终端Web》
gleams:http