小编Jer*_*ell的帖子

Java:整数等于==

从Java 1.5中,你几乎可以互换Integer使用int在许多情况下.

但是,我发现我的代码中存在一个潜在的缺陷让我感到有些惊讶.

以下代码:

Integer cdiCt = ...;
Integer cdsCt = ...;
...
if (cdiCt != null && cdsCt != null && cdiCt != cdsCt)
    mismatch = true;
Run Code Online (Sandbox Code Playgroud)

虽然我无法确定在什么情况下,但是当值相等时,似乎错误地设置了不匹配.我在Eclipse中设置了一个断点,看到这些Integer值都是137,我检查了布尔表达式并且它说它是假的,但当我跨过它时,它设置不匹配为真.

将条件更改为:

if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt))
Run Code Online (Sandbox Code Playgroud)

解决了这个问题.

有谁可以解释为什么会这样?到目前为止,我只在自己的PC上看到了我的localhost上的行为.在这种特殊情况下,代码成功地通过了大约20次比较,但在2次失败.问题始终可以重现.

如果这是一个普遍的问题,它应该导致我们的其他环境(开发和测试)出错,但到目前为止,没有人在执行此代码片段的数百次测试后报告该问题.

==用于比较两个Integer值仍然不合法吗?

除了下面的所有精细答案之外,以下stackoverflow链接还有相当多的附加信息.它实际上已经回答了我原来的问题,但因为我没有在我的问题中提到自动装箱,所以它没有出现在选定的建议中:

为什么编译器/ JVM不能让autoboxing"正常工作"?

java primitive integer wrapper equals-operator

142
推荐指数
5
解决办法
15万
查看次数

为什么字体颜色属性中的怪异东西会产生真实的颜色?

可能重复:
为什么HTML认为"chucknorris"是一种颜色?

我正在教一个小伙伴.高中/高中网络编程课,我们开始使用简单的元素和属性,如字体和颜色,然后再转到CSS.我知道颜色已被弃用,HTML5中不包含字体,但出于教学目的,我发现从简单的HTML标签开始并逐步使用CSS非常方便.在课程的第一周,学生可以在页面上更改颜色,从而获得很多乐趣.(我也在第1周教他们选框和眨眼,但告诉他们如果他们再次使用它们,他们将失去分数).

其中一名学生开始用颜色属性值中的奇怪事物提交作业,如"Skittles"或"Spiderman".我开始尝试使用它并发现几乎任何你在font标签上的color =""属性中都会产生某种颜色.并且看起来在IE,Firefox,Chrome,Opera和Safari的最新版本中颜色是一致的.

我发现将"LuckyCharms"作为CSS颜色放入不起作用.它似乎只适用于HTML属性中预期颜色的位置,例如font color ="LuckyCharms"或body bgcolor ="LuckyCharms".

我试图向我的班级解释为什么会发生这种情况,到目前为止我还没有理解它,或者谷歌给出了一个好的答案.它似乎被解释为颜色代码,但我无法理解如何.

更新:经过一些试验和错误,我已经确定了一个5步算法(使用提供的链接)将几乎任何字符串转换为相应的十六进制颜色.我将在此提供算法,以便对未来访问者进行启发:

  1. 将每个非十六进制字符更改为0.
  2. 将0添加到字符串,直到其长度为3的倍数.
  3. 将字符串分成3个相等的部分.
  4. 当子字符串的长度大于2,并且所有三个子字符串都以0开头时,从每个字符串中删除前导0.
  5. 如果子字符串的长度仍大于2,则将每个子字符串截断为2个字符.

就是这样,将子串放在一起,你就得到了十六进制颜色代码.我用大约20个不同的样本验证了这个算法,并使用Firefox ColorZilla附加颜色选择器比较了结果.

请注意,在这种情况下,规则ARE确实在其中一个答案中指定的链接中明确说明,并且将被所有浏览器遵守.所以你可以指望在任何浏览器中工作(你真的想要使用有趣的颜色名称).

html fonts colors

54
推荐指数
2
解决办法
6983
查看次数

更改iframe src时如何设置自定义http标头?

有没有办法在<iframe>使用javascript更改源(src)时为自己完成的请求添加自定义http标头?

javascript iframe httprequest

36
推荐指数
4
解决办法
6万
查看次数

单一登录Web应用程序

我一直试图了解这个问题如何解决一个多月了.我真的需要提出一个有效的通用方法.我有一个理论,但我不确定这是最简单(或正确)的方法,而且我无法找到任何信息来支持我的想法.

这是场景:

1)您有一个复杂的Web应用程序,可以在订阅的基础上提供安全的内容.

2)用户需要使用用户名和密码登录您的应用程序.

3)您向已经拥有企业身份验证技术的大型公司(例如,Active Directory)销售.

4)您希望与企业身份验证机制集成,以允许其用户登录您的Web应用程序,而无需输入其用户名和密码.

现在,您提出的任何解决方案都必须提供以下机制:

  • 添加新用户
  • 删除用户
  • 改变用户信息
  • 允许用户登录

理想情况下,当公司客户对自己的身份验证进行相应更改时,所有这些都会"自动"发生.

现在,我有一个理论认为,这样做(至少对于Active Directory)的方法是我编写一个客户端应用程序,它与客户的Active Directory集成以跟踪目标更改,然后将这些更改传达给我网络应用.我认为如果这个通信是通过我的网络应用程序提供的Web服务完成的,那么它将保持不可控制的安全级别,这显然是这些公司客户的要求.

我找到了一些有关Microsoft产品的信息,称为Active Directory联合身份验证服务(ADFS),这对我来说可能是正确的方法,也可能不是.它看起来有点笨重,并且有些要求可能对所有客户都不起作用.

对于其他现有ID方案(如Athens和Shibboleth),我认为不需要客户端应用程序.这可能只是与现有ID服务相关联的问题.

我很感激任何人对我在这里提到的任何建议.特别是,如果你能告诉我,我的理论是否正确,提供了一个与服务器端Web服务通信的客户端应用程序,或者我是否完全朝着错误的方向前进.此外,如果你能指出我在任何网站或文章解释如何做到这一点,我真的很感激.到目前为止,我的研究还没有发现太多.

最后,如果您能告诉我当前提供此服务的任何Web应用程序(特别是与企业Active Directory相关联),我将非常感激.我想知道其他B2B Web应用程序是否像salesforce.com或hoovers.com为其企业客户提供类似的服务.

我讨厌在黑暗中,并且非常感谢你能摆脱的任何光......

杰里米

active-directory shibboleth single-sign-on

17
推荐指数
1
解决办法
1万
查看次数

未捕获的语法错误:意外的标识符?

我似乎无法纠正控制台所说的错误,任何人都可以帮助我.我的代码如下.我创建了一个Web表单,将数据保存到本地存储并在屏幕上显示,然后删除所有存储的数据(如果需要).但由于某种原因,它根本不会从表格中获取数据.

// Wait until the DOM is ready 
window.addEventListener("DOMContentLoaded", function (){
  // getElementById function
  function $(x) {
    var theElement = document.getElementById(x);
    return theElement;
  } // end theElement function

  function makeCats () {
    var formTag = document.getElementsByTagName("form"), // form tag is an array
    selectListItem = $('select'),
    makeSelect = document.createElement('select'),
    makeSelect.setAttribute("id", "groups");
    for(var i=0, j=notesCategories; i<j; i++) {
      var makeOption = document.createElement('option');
      var optionText = notesCategories[i]
      makeOption.setAttribute("value", "optionText");
      makeOption.innerHTML = optionText;
      makeSelect.appendChild(makeOption);
    } // end for loop
    selectListItem.appendChild(makeSelect);
  } // end makeCat …
Run Code Online (Sandbox Code Playgroud)

javascript

11
推荐指数
1
解决办法
18万
查看次数

(isUserInRole())是将用户权限/安全性附加到JSF按钮的最简单方法吗?

我最近在JSP中开发了一个tomcat web应用程序,它使用绑定到公司Active Directory的声明性安全性(server.xml/web.xml).我被要求为刚刚起步的项目添加JSF支持.将登录表单转换为jsf是一件简单的事情,安全模型仍然有效.

一位员工询问我是否允许更广泛的受众查看其中一个报告,但仅为较小的组呈现操作按钮.作为JSF的新手,我不得不做一些研究.

我花了大约四个小时来搜索诸如"jsf按钮安全性"和"jsf按钮权限"之类的内容,并尝试了大多数死路一条的各种建议.另一位同事建议使用Spring安全模型,但如果有更简单的方法,我不想处理一大堆Spring库.

最后,我偶然发现了答案,这非常简单.我只需要使用HttpServletRequest方法:isUserInRole()来确定当前登录的用户是否有权查看操作按钮.在过去的十年里,我已经使用了很多HttpServletRequests,但我不记得曾经学过这种方法.使用jsf,获得该方法很简单,如下所示:

public boolean isUserInRole(String role) {
    return (FacesContext.getCurrentInstance().getExternalContext().isUserInRole(role));
}
Run Code Online (Sandbox Code Playgroud)

我的问题具体是:我是否应该注意这种方法的问题,还有另一种更简单的方法吗?

java jsf servlets declarative-security jsf-2

8
推荐指数
1
解决办法
1848
查看次数