小编Kor*_*gay的帖子

如何正确地从JSF中的URL获取参数?

我相信有两种方法可以从JSF中的URL获取参数.

一个人在豆里:

Map<String, String> params =FacesContext.getCurrentInstance().
                   getExternalContext().getRequestParameterMap();
String parameterOne = params.get("parameterOne");
Run Code Online (Sandbox Code Playgroud)

另一个在facelets页面中

<f:metadata>
    <f:viewParam name="parameterOne" value="#{bean.parameterOne}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)

显然后者需要类中的字段和getter/setter.

除此之外,这两种不同方法之间有什么区别?应该首选哪一个?

jsf

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

JCE无法在java swing应用程序中验证提供程序BC

我在JAVA中创建了一个基于swing的应用程序,它使用了一些加密技术.但是javax.crypto.KeyGenerator.getInstance("AES","BC")给出了异常:

java.security.NoSuchProviderException: JCE cannot authenticate the provider BC
        at javax.crypto.SunJCE_b.a(DashoA13*..)
        at javax.crypto.KeyGenerator.getInstance(DashoA13*..)
Run Code Online (Sandbox Code Playgroud)

那么问题是什么?

java encryption

27
推荐指数
2
解决办法
5万
查看次数

多少位是"单词"?

这是来自汇编语言一步一步的书,Jeff Duntemann:

这是快速浏览:一位是单个二进制数字,0或1.一个字节是8位并排.一个字是并排的2个字节.双字是并排的2个字.四字是并排的2个双字.

这来自"计算机组织和汇编语言原理:使用Java虚拟机"一书,Patrick Juola:

为方便起见,通常将8位分组为单个块,通常称为字节.下一个最大的命名块是一个字.单词的定义和大小不是绝对的,而是因计算机而异.一个字是计算机要处理的最方便的数据块的大小.

那么是一个字2字节(16位),还是计算机最方便的数据块?(我也不确定这意味着什么..)

byte bit

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

Web应用程序版本究竟是什么?它有什么影响?

在java Web应用程序中,有一个名为web.xml的文件,它有一个版本控制.

究竟是什么?它是干什么用的?

是web.xml的SO wiki.但它并没有真正解释我.

它允许您在Web应用程序中定义,声明和配置基于Servlet API的实现,例如servlet,过滤器和侦听器.

有人可以用简单的例子来解释这个吗?

谢谢.

编辑:

示例web.xml版本控制:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
Run Code Online (Sandbox Code Playgroud)

web.xml java-ee

25
推荐指数
2
解决办法
4万
查看次数

为什么我必须用Java链接Stream操作?

我认为我研究过的所有资源都强调一个流只能被消耗一次,消费是通过所谓的终端操作完成的(这对我来说非常清楚).

出于好奇我试过这个:

import java.util.stream.IntStream;

class App {
    public static void main(String[] args) {
        IntStream is = IntStream.of(1, 2, 3, 4);
        is.map(i -> i + 1);
        int sum = is.sum();
    }
}
Run Code Online (Sandbox Code Playgroud)

最终会抛出一个运行时异常:

Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:229)
    at java.util.stream.IntPipeline.reduce(IntPipeline.java:456)
    at java.util.stream.IntPipeline.sum(IntPipeline.java:414)
    at App.main(scratch.java:10)
Run Code Online (Sandbox Code Playgroud)

这是常见的,我遗漏了一些东西,但仍然想问:据我所知,这map是一个中间(和懒惰)操作,并且对Stream本身没有任何作用.只有当sum调用终端操作(这是一个急切的操作)时,才会消耗操作流.

但为什么我要把它们连在一起呢?

有什么区别

is.map(i -> i + 1);
is.sum();
Run Code Online (Sandbox Code Playgroud)

is.map(i -> i + 1).sum();
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

24
推荐指数
2
解决办法
2099
查看次数

删除列表中存在的任何空列表

我有一个清单:

i = [[1,2,3,[]],[],[],[],[4,5,[],7]]
Run Code Online (Sandbox Code Playgroud)

我想删除所有空列表:

[[1,2,3],[4,5,7]]
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

这是我的代码:

res = [ele for ele in i if ele != []]
Run Code Online (Sandbox Code Playgroud)

python list-comprehension list

24
推荐指数
2
解决办法
1127
查看次数

String.intern()的垃圾收集行为

如果我使用String.intern()来提高性能,因为我可以使用"=="来比较实习字符串,我会遇到垃圾收集问题吗?实习字符串的垃圾收集机制与普通字符串有何不同?

java string performance garbage-collection

23
推荐指数
3
解决办法
6504
查看次数

口译员如何解释代码?

为简单起见,想象一下这种情况,我们有一台2位计算机,它有一对2位寄存器,称为r1和r2,只适用于立即寻址.

让我们说比特序列00意味着添加到我们的CPU.也01的装置将数据移动到R 1和10组的装置将数据移动到R2.

因此,这台计算机和汇编程序有一个汇编语言,其中的示例代码将被编写为

mov r1,1
mov r2,2
add r1,r2
Run Code Online (Sandbox Code Playgroud)

简单地说,当我将此代码汇编为本机语言时,文件将类似于:

0101 1010 0001
Run Code Online (Sandbox Code Playgroud)

上面的12位是本机代码:

Put decimal 1 to R1, Put decimal 2 to R2, Add the data and store in R1. 
Run Code Online (Sandbox Code Playgroud)

所以这基本上是编译代码的工作方式,对吧?

让我们说有人为这个架构实现了一个JVM.在Java中,我将编写如下代码:

int x = 1 + 2;
Run Code Online (Sandbox Code Playgroud)

JVM将如何解释此代码?我的意思是最终必须将相同的位模式传递给cpu,不是吗?所有cpu都有许多可以理解和执行的指令,它们毕竟只是一些位.让我们说编译的Java字节码看起来像这样:

1111 1100 1001
Run Code Online (Sandbox Code Playgroud)

或者其他..是否意味着解释在执行时将此代码更改为0101 1010 0001?如果是,它已经在本机代码中了,那为什么说JIT只是经过多次启动?如果它没有完全转换为0101 1010 0001,那么它会做什么?它如何使cpu做添加?

也许我的假设存在一些错误.

我知道解释很慢,编译代码更快但不可移植,虚拟机"解释"代码,但是如何?我正在寻找"如何完全/技术解释".任何指针(如书籍或网页)都是受欢迎的,而不是答案.

java interpreter bytecode interpreted-language compilation

23
推荐指数
1
解决办法
2144
查看次数

使用Java Streams按Collection属性进行分组

我有一个包含字符串集合的对象,比方说一个人说的语言.

public class Person {
   private String name;
   private int age;
   private List<String> languagesSpoken;

   // ...
}
Run Code Online (Sandbox Code Playgroud)

现在,创建像这样的一些实例......

Person p1 = new Person("Bob", 21, Arrays.asList("English", "French", "German"));
Person p2 = new Person("Alice", 33, Arrays.asList("English", "Chinese", "Spanish"));
Person p3 = new Person("Joe", 43, Arrays.asList("English", "Dutch", "Spanish", "German"));

//put them in list
List<Person> people = Arrays.asList(p1,p2,p3);
Run Code Online (Sandbox Code Playgroud)

...我想要的是Map<String, List<Person>>,对于每种语言列出说这种语言的人:

["English" -> [p1, p2, p3],
 "German"  -> [p1, p3],
 etc. ]
Run Code Online (Sandbox Code Playgroud)

当然,这可以通过命令式方式轻松编程,但如何使用Java Streams实现功能?我尝试了类似的东西people.stream.collect(groupingBy(Person::getLanguagesSpoken))但当然给了我一个Map<List<String>, List<Person>>.我能找到的所有例子都groupingBy在Primitives或Strings上使用.

java java-8 java-stream

22
推荐指数
1
解决办法
709
查看次数

为什么没有调用PostConstruct?

我正在开发一个简单的Java EE应用程序.

我有这样的课:

import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

@Stateless
public class BlogEntryDao {

    EntityManager em;

    @PostConstruct
    public void initialize(){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Persistence");
        em = emf.createEntityManager();
    }

    public void addNewEntry(){
        Blogentry blogentry = new Blogentry();

        blogentry.setTitle("Test");
        blogentry.setContent("asdfasfas");

        em.persist(blogentry);

    }
}
Run Code Online (Sandbox Code Playgroud)

所以我的托管bean调用这个方法.直到这里没有问题.但是由于没有调用initialize方法,我在em.persist中获得了一个NPE .

为什么没有调用initialize方法?我在Glassfish服务器上运行它.

问候.

java ejb java-ee

21
推荐指数
4
解决办法
3万
查看次数