最好将所有样式放在外部CSS文件中,以利用缓存,标记和设计的分离,更好的概述等.
然而,我经常遇到元素应该看起来相同的问题,即具有相同的类,但需要在位置上不同,例如由于成分差异需要不同的边距或填充.
我想到了三个选择:
选项1:从位置样式(边距/填充)中拆分外观样式,将它们放在单独的类中并根据需要组合它们.
.myClass { ...; }
.myClass.top { margin-top: 20px; }
.myClass.inside { margin: 10px 0px; }
.myClass.bottom { margin-bottom: 20px; }
Run Code Online (Sandbox Code Playgroud)
选项2:复制类,相应地重命名它们并保持其自己的类中的每个差异.
.myClassTop { ...; margin-top: 20px; }
.myClass { ...; margin: 10px 0px; }
.myClassBottom { ...; margin-bottom: 20px; }
Run Code Online (Sandbox Code Playgroud)
选项3:使用内联样式声明不同的边距/填充.
<div class="myClass" style="margin-top: 20px;">
<div class="myClass">
<div class="myClass" style="margin-bottom: 20px;">
Run Code Online (Sandbox Code Playgroud)
有
.myClass { ...; margin: 10px 0px; }
Run Code Online (Sandbox Code Playgroud)
我的常识告诉我使用选项1和级联差异取决于父/子结构.但这通常会让人感到困惑,特别是对于其他阅读CSS的开发人员而言.所以我尝试了选项3(只有几个外部边距/填充),这似乎工作得很好.
我仍然以某种奇怪的方式对它感到难过.有这么多人告诉不要使用内联风格.通常我会说"无论什么效果最好",但最近我意识到内联边距/填充可能会影响网站的渲染过程,从而导致"跳舞块".我不确定这种效果是否真的是由于样式的处理顺序或者其他一些令人讨厌的事情造成的.
有什么建议吗?
以下用于查找素数的代码在Adobe ColdFusion(10)和Lucee(4.5)之间的性能差异很大.在同一台机器上测试(6C i7 3930k @ 4 GHz,Windows 10 64 Bit,两个CFML引擎上的JVM内存设置相同:JDK7 -Xms512m -Xmx2048m -XX:MaxPermSize=512m):
<cfscript>
ticks = getTickCount();
stopIndex = 10000;
primes = [];
divisions = 0;
primes.add(2);
primes.add(3);
n = 5;
for (n; n < stopIndex; n += 2) {
isPrime = true;
d = 3;
for (d; d < n; d++) {
divisions++;
if (n % d == 0) {
isPrime = false;
break;
}
}
if (isPrime) {
primes.add(n);
}
}
ticks = (getTickCount() - ticks);
</cfscript> …Run Code Online (Sandbox Code Playgroud) 在ColdFusion 10中的组件上调用getMetaData()似乎随机抛出一个内部NullPointerException.虽然此异常既不暴露也不影响实际请求(因此对我们的应用程序本身并不重要),但它仍然会exception.log快速填满文件.
我注意到这可能与ColdFusion的路径缓存有关,因为我只在生产服务器上获得这些NullPointerException条目.我还注意到,每次使用getMetaData()时,每个组件只抛出一次这个异常,尽管不是每个第一次调用都会触发它.
为了澄清:getMetaData()工作得很好,但它有时会在ColdFusion的exception.log文件中记录NullPointerException.
有没有人知道解决方案(禁用缓存或exception.log文件除外)?
背景:我使用getMetaData()来识别组件,在使用时尤其有用<cfinterface>.
java.lang.NullPointerException
at coldfusion.util.Utils.getServletPath(Utils.java:100)
at coldfusion.util.Utils.getServletPath(Utils.java:90)
at coldfusion.util.Utils.getBaseTemplatePath(Utils.java:419)
at coldfusion.runtime.TemplateProxyFactory.getTemplateFileHelper(TemplateProxyFactory.java:1567)
at coldfusion.runtime.MetadataUtils.getComponentMetadata(MetadataUtils.java:112)
at coldfusion.runtime.CfJspPage.GetComponentMetadata(CfJspPage.java:2744)
at coldfusion.runtime.TemplateProxy.getRuntimeComponentMetadata(TemplateProxy.java:1940)
at coldfusion.runtime.TemplateProxy.getRuntimeMetadata(TemplateProxy.java:1801)
at coldfusion.runtime.MetadataUtils.getMetaData(MetadataUtils.java:54)
at coldfusion.runtime.CfJspPage.GetMetadata(CfJspPage.java:2717)
Run Code Online (Sandbox Code Playgroud) java reflection coldfusion nullpointerexception coldfusion-10
我的公司即将从头开始重新设计一个大项目.我们目前正在考虑如何实现数据提供程序.我过去几个月曾经整合过一些网络服务,就像用这种方式处理数据一样.所以我在考虑一个RESTful设计.我们将使用REST支持附带的ColdFusion 10,但实际上我并不喜欢它所需的组件结构.
最大的优势可能是我们将能够使用REST为我们所有的平台提供数据,即:网站,移动网站和iOS/Android应用程序.我的安全方法如下:任何人(显然)都可以访问公共数据.只能使用BasicAuth访问私有数据.使用BasicAuth还允许我们使用具有不同访问级别的用户角色.授权将是隐式的并基于会话/登录.
<!--- server-side example to request customer information (private data, BasicAuth required) --->
<cfset requestedID = 123>
<cfhttp url="/customer/#requestedID#" method="get" username="#APPLICATION.REST_SYSTEMUSER#" password="#APPLICATION.REST_SYSTEMUSER_PW#">
<cfhttpparam type="url" name="includeAddresses" value="true">
</cfhttp>
<!--- successful response in JSON --->
{
"ID": 123,
"FirstName": "John",
"LastName": "Doe",
"Birthday": "1970-01-01",
"BillingAddress": {
"Receiver": "John Doe",
"Street": {
"Name": "Main Street",
"Number": "13",
"Addition": ""
}
"City": {
"ZipCode": "AB-123",
"Name": "Sampletown",
"District": ""
}
},
"ShippingAddresses": [
]
}
<!--- deserialize JSON and build an object …Run Code Online (Sandbox Code Playgroud) 编辑:错误已提交。
假设我有两个相互指向的 ArrayLists(循环引用):
x = createObject("java", "java.util.ArrayList").init();
y = createObject("java", "java.util.ArrayList").init();
x.add(y);
y.add(x);
Run Code Online (Sandbox Code Playgroud)
如果我调用hashCode它们中的任何一个,它会导致StackOverflowError ArrayList 实现。这是可以预料的。
但是,当我调用 时System.identityHashCode,是不是应该使用Object.hashCode实现,它不会跟随 ArrayList 中的元素,因此不会导致StackOverflowError?
为给定对象返回与默认方法 hashCode() 返回的哈希码相同的哈希码,无论给定对象的类是否覆盖 hashCode()。
在 Adobe ColdFusion 中,此代码工作正常:
System = createObject("java", "java.lang.System");
System.identityHashCode(x); // returns some integer
System.identityHashCode(y); // returns another integer
Run Code Online (Sandbox Code Playgroud)
(这显然也适用于本机编译并使用 Java 运行。)
然而,在 Lucee 中,它会立即导致StackOverflowError:
lucee.runtime.exp.NativeException: java.lang.StackOverflowError
at java.base/java.util.ArrayList.hashCodeRange(ArrayList.java:627)
at java.base/java.util.ArrayList.hashCode(ArrayList.java:614)
at java.base/java.util.ArrayList.hashCodeRange(ArrayList.java:627)
at java.base/java.util.ArrayList.hashCode(ArrayList.java:614)
[...]
Run Code Online (Sandbox Code Playgroud)
为什么它在hashCode这里运行 ArrayList …
为了注销用户,我总是使用以下行:
<cfset structClear(SESSION)>
<cfcookie name="CFID" value="" expires="NOW">
<cfcookie name="CFTOKEN" value="" expires="NOW">
Run Code Online (Sandbox Code Playgroud)
它会在运行时清除会话中保留的数据,并重置/更新CFID和CFTOKEN.它仍然适用于我们的旧服务器(ColdFusion 8),但它不再适用于我们的新服务器(ColdFusion 10).ColdFusion 10中此尝试失败的原因相当简单:每当我尝试覆盖CFID或CFTOKEN(with <cfcookie>)时,cookie都会放在顶级域上,例如:
Cookie set via <cfcookie> on ColdFusion 10:
domain: .myserver.com
Run Code Online (Sandbox Code Playgroud)
而ColdFusion将其会话cookie放在实际(子)域上:
Generated CFID/CFTOKEN by ColdFusion 10:
domain: mywebsite.myserver.com
Run Code Online (Sandbox Code Playgroud)
有趣的是:如果我设置如下:
<cfcookie name="TEST" value="..." expires="NEVER">
Run Code Online (Sandbox Code Playgroud)
cookie正确设置为:
domain: mywebsite.myserver.com
Run Code Online (Sandbox Code Playgroud)
我可以使用以下方法轻松清除cookie:
<cfcookie name="TEST" value="" expires="NOW">
Run Code Online (Sandbox Code Playgroud)
我试图使用域属性,但是这个:
<cfcookie name="CFID" value="" domain="mywebsite.myserver.com" expires="NOW">
Run Code Online (Sandbox Code Playgroud)
总是最终:
domain: .mywebsite.myserver.com
Run Code Online (Sandbox Code Playgroud)
(注意前面的点)因此不被识别为相同的cookie.
另一个奇怪的是,使用:
<cfcookie name="CFID" value="" expires="NOW">
Run Code Online (Sandbox Code Playgroud)
不会只生成一个包含错误域名的cookie,而是保留而不是删除过期.
我在ColdFusion 10机器上检查了cookie的服务器设置,Disable updating ColdFusion internal cookies using ColdFusion tags/functions但未检查属性.
这个奇怪的案子可以帮助我吗?
我们amazon-pay-api-sdk-java-2.2.2.jar在 Adobe ColdFusion中成功地使用了 AmazonPay API for Java ( )。我们最近引入了 Lucee(在 Jetty 上,也在 OpenJDK 8 上运行)并尝试运行相同的代码(相关摘录):
payConfig = createObject("java", "com.amazon.pay.api.PayConfiguration").init();
payConfig.setPrivateKey("...");
Run Code Online (Sandbox Code Playgroud)
但是,在调用 时setPrivateKey,它将到达Security.addProvider(new BouncyCastleProvider());through PayConfiguration,我们收到一个java.lang.ClassNotFoundException:
lucee.runtime.exp.NativeException: org.bouncycastle.jce.provider.BouncyCastleProvider
at com.amazon.pay.api.PayConfiguration.setPrivateKey(PayConfiguration.java:77)
[...]
at java.lang.Thread.run(Thread.java:823)
Caused by: java.lang.NoClassDefFoundError: org.bouncycastle.jce.provider.BouncyCastleProvider
... 57 more
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider not found by amazon.pay.api.sdk.java.2.2.2 [49]
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1597)
at org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79)
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1982)
at java.lang.ClassLoader.loadClass(ClassLoader.java:881)
... 57 more
Run Code Online (Sandbox Code Playgroud)
我们已将所有依赖项(即bcprov-jdk15on-1.65.jarBouncyCastle)放在/lucee-server/context/lib. BouncyCastleProvider在 .cfm/.cfc 中创建确实按预期工作:
createObject("java", "org.bouncycastle.jce.provider.BouncyCastleProvider").init()
我不明白 Lucee …
coldfusion ×6
java ×3
lucee ×3
apache-felix ×1
arraylist ×1
bouncycastle ×1
cookies ×1
css ×1
html ×1
performance ×1
reflection ×1
rest ×1
web ×1
web-services ×1