我在用JSF从xhtml页面更新bean变量时遇到问题。我可以用自定义值更新Bean变量,但我希望从xhtml页面中定义的变量中读取该值。
xhtml页面的相关部分如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui">
<h:body>
<ui:repeat value="#{bean.variable}" var="results">
<c:set target="#{bean}" property="otherVariable" value="results.name" />
Testing if the bean-variable could be read in the loop: #{results.email}
</ui:repeat>
</h:body>
</html>
在Bean类中,我将otherVariable打印到stdout。每次都是空。当我用"5"替换Tag中的值时,Bean变量中的值设置正确。
那么,如何从xhtml页面更新Bean变量呢?
这里有两个问题:
-
您试图在您的c:set标记中设置值,而不使用正确的EL:"#{results.name}"
-
c: 集合标签在人脸生命周期内评估得太早,无法在ui的内容中使用:重复标签
在这些情况下,我通常只将此值作为参数传递给需要它的backingbean方法。例如:#{results.doSomething(results.name)}