我相信有两种方法可以从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.
除此之外,这两种不同方法之间有什么区别?应该首选哪一个?
我在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)
那么问题是什么?
这是来自汇编语言一步一步的书,Jeff Duntemann:
这是快速浏览:一位是单个二进制数字,0或1.一个字节是8位并排.一个字是并排的2个字节.双字是并排的2个字.四字是并排的2个双字.
这来自"计算机组织和汇编语言原理:使用Java虚拟机"一书,Patrick Juola:
为方便起见,通常将8位分组为单个块,通常称为字节.下一个最大的命名块是一个字.单词的定义和大小不是绝对的,而是因计算机而异.一个字是计算机要处理的最方便的数据块的大小.
那么是一个字2字节(16位),还是计算机最方便的数据块?(我也不确定这意味着什么..)
在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) 我认为我研究过的所有资源都强调一个流只能被消耗一次,消费是通过所谓的终端操作完成的(这对我来说非常清楚).
出于好奇我试过这个:
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)
?
我有一个清单:
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) 如果我使用String.intern()来提高性能,因为我可以使用"=="来比较实习字符串,我会遇到垃圾收集问题吗?实习字符串的垃圾收集机制与普通字符串有何不同?
为简单起见,想象一下这种情况,我们有一台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做添加?
也许我的假设存在一些错误.
我知道解释很慢,编译代码更快但不可移植,虚拟机"解释"代码,但是如何?我正在寻找"如何完全/技术解释".任何指针(如书籍或网页)都是受欢迎的,而不是答案.
我有一个包含字符串集合的对象,比方说一个人说的语言.
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 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 ×6
java-8 ×2
java-ee ×2
java-stream ×2
bit ×1
byte ×1
bytecode ×1
compilation ×1
ejb ×1
encryption ×1
interpreter ×1
jsf ×1
list ×1
performance ×1
python ×1
string ×1
web.xml ×1