%{ }

Struts2的标签都支持动态数据的访问,标签的属性都可以使用OGNL表达式。Struts2标签的属性具有类型,这些类型可以简单地分为字符串类型和非字符串类型,对于字符串类型的属性,如果要访问动态数据,需要使用%{…}这样的语法。例如:
<s:include value=”%{url}”/>

include标签的value属性民是字符串类型,Struts2将对这个属性进行解析,如果属性值使用%{…}包含,那么%{…}中的内容将被视为OGNL表达式。如果属性中没有使用%{…},那么属性值将被直接看成是字符串数据。例如:
<s:include value=”urlTag.action”/>

对于非字符串类型的属性值,将直接作为OGNL表达式进行求值。例如:
<s:property value=”username”/>

property标签的value属性是Object类型,它的值username将作为OGNL表达式进行求值,结果是值栈中位于栈顶的对象的username属性的值。如果要为非字符串类型的属性直接指定字符串数据,那么需要使用OGNL中的字符串常量,即用单引号或双引用将字符串括起来。例如:
<s:property value=”’zhangSan’”/>

在property标签的value属性中,也可以使用%{…}。不过使用%{…}与不使用没有什么区别。Struts2会忽略%{…}的存在,把内容以OGNL表达式来处理。
<s:property value=”%{’zhangSan’}”/>

对property标签的value属性来说,%{‘zhangSan’}与’zhangSan’是相同的。因为value属性的类型是Object,所以value属性的内容直接被作为OGNL表达式处理。但Struts2不会因为加了%{…}而报错,而是忽略掉%{…}的存在,直接把内容取出做为OGNL表达式处理。
总结一下,Struts2标签的属性按照下列三个规则进行计算:
所有的字符串属性类型都会解析%{…}这样的语法。将%{…}内容做为OGNL表达式处理。
所有的非字符串属性类型都不会被解析,而是直接被看作一个OGNL表达式进行求值。
对于第二个规则的例外情况是,如果非字符串属性中使用了%{…}语法,那么%{…}将被忽略,花括号中的内容将作为OGNL表达式被计算。

当我们使用标签时,忘记了某个属性是字符串类型,还是非字符串类型,那么有一个冬的方法,那就是不考虑它是什么类型,统一使用%{…}语法。

转载于:https://www.cnblogs.com/a757956132/p/4018304.html

%%%%%%%%%%%%%%%%%%%%%%%%% clear;clc;tic;epssys=1.0e-6; %设定一个最小量,避免系统截断误差或除零错误 %%%%%%%%%%%%%%%%%%%%%%%%%% %定义实际的正空间格子基矢 %%%%%%%%%%%%%%%%%%%%%%%%%% a=0.02; a1=a*[1 0]; a2=a*[0 1]; %%%%%%%%%%%%%%%%%%%%%%%%%% %定义晶格的参数 %%%%%%%%%%%%%%%%%%%%%%%%%% rho1=11600;E1=4.08e10;mju1=1.49e10;lambda1=mju1*(E1-2mju1)/(3mju1-E1); %散射体的材料参数 rho2=1300;E2=1.175e5;mju2=4e4;lambda2=mju2*(E2-2mju2)/(3mju2-E2); %基体的材料参数 Rc=0.006; %散射体截面半径 Ac=pi*(Rc)^2; %散射体截面面积 Au=a^2; %二维格子原胞面积 Pf=Ac/Au; %填充率 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %生成倒格基矢 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% b1=2pi/a[1 0]; b2=2pi/a[0 1]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %选定参与运算的倒空间格矢量,即参与运算的平面波数量 %设定一个l,m的取值范围,变化l,m即可得出参与运算的平面波集合 NrSquare=10; %选定倒空间的尺度,即l,m(倒格矢G=lb1+mb2)的取值范围。 %NrSquare确定后,使用Bloch波数目可能为(2NrSquare+1)^2 G=zeros((2NrSquare+1)^2,2); %初始化可能使用的倒格矢矩阵 i=1; for l=-NrSquare:NrSquare for m=-NrSquare:NrSquare G(i,:)=lb1+mb2; i=i+1; end; end; NG=i-1; %实际使用的Bloch波数目 G=G(1:NG,:); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %生成k空间的rho(Gi-Gj),mju(Gi-Gj),lambda(Gi-Gj)值,i,j从1到NG。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% rho=zeros(NG,NG);mju=zeros(NG,NG);lambda=zeros(NG,NG); for i=1:NG for j=1:NG Gij=norm(G(j,:)-G(i,:)); if (Gij<epssys) rho(i,j)=rho1Pf+rho2(1-Pf); mju(i,j)=mju1Pf+mju2(1-Pf); lambda(i,j)=lambda1Pf+lambda2(1-Pf); else rho(i,j)=(rho1-rho2)2Pfbesselj(1,GijRc)/(GijRc); mju(i,j)=(mju1-mju2)2Pfbesselj(1,GijRc)/(GijRc); lambda(i,j)=(lambda1-lambda2)2Pfbesselj(1,GijRc)/(GijRc); end; end; end; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %定义简约布里渊区的各高对称点 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% T=(2pi/a)[epssys 0]; M=(2pi/a)[1/2 1/2]; X=(2pi/a)[1/2 0]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %对于简约布里渊区边界上的每个k,求解其特征频率 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% THETA_A=zeros(NG,NG); %待解的本征方程A矩阵 THETA_B=zeros(NG,NG); %待解的本征方程B矩阵 Nkpoints=10; %每个方向上取的点数 stepsize=0:1/(Nkpoints-1):1; %每个方向上步长 TX_eig=zeros(Nkpoints,NG); %沿TX方向的波的待解的特征频率矩阵 XM_eig=zeros(Nkpoints,NG); %沿XM方向的波的待解的特征频率矩阵 MT_eig=zeros(Nkpoints,NG); %沿MT方向的波的待解的特征频率矩阵 for n=1:Nkpoints fprintf([‘\n k-point:’,int2str(n),‘of’,int2str(Nkpoints),‘.\n’]); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %对于TX(正方格子)方向上的每个k值,求解其特征频率 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TX_step=stepsize(n)(X-T)+T; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %n 求本征矩阵的元素 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for i=1:NG for j=1:NG kGi=TX_step+G(i,:); kGj=TX_step+G(j,:); THETA_A(i,j)=mju(i,j)dot(kGi,kGj); THETA_B(i,j)=rho(i,j); end; end; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %求解TX(正方格子)方向上的k矩阵的特征频率 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TX_eig(n,:)=sort(sqrt(eig(THETA_A,THETA_B))).‘; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %对于XM(正方格子)方向上的每个k值,求解其特征频率 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% XM_step=stepsize(n)(M-X)+X; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %n 求本征矩阵的元素 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for i=1:NG for j=1:NG kGi=XM_step+G(i,:); kGj=XM_step+G(j,:); THETA_A(i,j)=mju(i,j)dot(kGi,kGj); THETA_B(i,j)=rho(i,j); end; end; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %求解XM(正方格子)方向上的k矩阵的特征频率 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% XM_eig(n,:)=sort(sqrt(eig(THETA_A,THETA_B))).’; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %对于MT(正方格子)方向上的每个k值,求解其特征频率 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% MT_step=stepsize(n)(T-M)+M; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %n 求本征矩阵的元素 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for i=1:NG for j=1:NG kGi=MT_step+G(i,:); kGj=MT_step+G(j,:); THETA_A(i,j)=mju(i,j)dot(kGi,kGj); THETA_B(i,j)=rho(i,j); end; end; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %求解MT(正方格子)方向上的k矩阵的特征频率 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% MT_eig(n,:)=sort(sqrt(eig(THETA_A,THETA_B))).'; end; fprintf(‘\n Calculation Time:%d sec’,toc); save pbs2D %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %绘制声子晶体能带结构图 %首先将特定方向(正方格子:TX,XM,MT)离散化 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% kaxis=0; TXaxis=kaxis:norm(T-X)/(Nkpoints-1):(kaxis+norm(T-X)); kaxis=kaxis+norm(T-X); XMaxis=kaxis:norm(M-X)/(Nkpoints-1):(kaxis+norm(X-M)); kaxis=kaxis+norm(X-M); MTaxis=kaxis:norm(T-M)/(Nkpoints-1):(kaxis+norm(T-M)); kaxis=kaxis+norm(T-M); Ntraject=3; %所需绘制的特定方向的数目 EigFreq=zeros(NtrajectNkpoints,1); figure(1) hold on; Nk=Nkpoints; for k=1:NG for i=1:Nkpoints EigFreq(i+0Nk)=TX_eig(i,k)/(2pi); EigFreq(i+1Nk)=XM_eig(i,k)/(2pi); EigFreq(i+2Nk)=MT_eig(i,k)/(2pi); end; plot(TXaxis(1:Nk),EigFreq(1+0Nk:1Nk),‘b’,… XMaxis(1:Nk),EigFreq(1+1Nk:2Nk),‘b’,… MTaxis(1:Nk),EigFreq(1+2Nk:3Nk),‘b’); end; grid on; hold off; titlestr=‘传统平面波展开法计算得到的二维声子晶体能带结构图’; title(titlestr); xlabel(‘波矢k’); ylabel(‘频率f/Hz’); axis([0 MTaxis(Nkpoints) 0 800]); set(gca,‘XTick’,[TXaxis(1) TXaxis(Nkpoints) XMaxis(Nkpoints) MTaxis(Nkpoints)]); xtixlabel=char(‘T’,‘X’,‘M’,‘T’); set(gca,‘XTickLabel’,xtixlabel) 检查一下这段matlab中的错误,然后生成正确的代码完整展示出来。
最新发布
08-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值