我们可以在HTML标记中使用JSF EL吗?例如,在纯HTML <td>元素中,我们可以使用EL #{bean.color}作为bgcolor属性吗?
<td bgcolor="#{bean.color}">
Run Code Online (Sandbox Code Playgroud) 我有一个 JSF 组件,它是从托管 bean 的 getter 初始化的getProperty()。setProperty()在该托管 bean 中是否也必须有一个 setter ?
我遇到困难,需要JSF专家的外界帮助,遇到以下问题:我在faces-config.xml中为特定类定义了一些转换器,所以我不必一直使用converter-attribute或tag.例如:
<converter>
<converter-for-class>org.joda.time.DateTime</converter-for-class>
<converter-class>com.example.converter.JodaDateTimeConverter</converter-class>
</converter>
Run Code Online (Sandbox Code Playgroud)
现在需要一个JSF-Component(主要是rich:extendedDataTable)的爬虫,它构建整个组件树并逐级转换为CSV,HTML或稍后可能需要的任何东西.即导出为CSV,HTML,...的通用方法,无需每次重新实现它.这几乎已经完成了(感谢我的一位老同事的好主意),除了一部分之外它确实很有效:
Object expressionResult = expression.getValue(FacesContext.getCurrentInstance().getELContext());
expressionResultString = expressionResult.toString();
Run Code Online (Sandbox Code Playgroud)
该命令检索h:outputText的值并将其转换为String.如果有针对特定expressionResult的自定义转换器,那么最后一行就是我想要用converter-for-class替换的.我无法找到如何为我的类找到精确的转换器(由faces-config指定).FacesContext似乎没有为我的用例提供任何有用的方法/对象.直接访问faces-config.xml似乎有点不对劲.正确的方法可能类似于:
Converter converter = magically_fetch_the_correct_converter_for_expressionResult_type;
converter.getAsString(FacesContext.getCurrentInstance(), component,
expressionResult);
Run Code Online (Sandbox Code Playgroud)
如果我用转换器-ID和相应的属性/标签的组件本身,但我真的想避免那种无用的附加代码这将是相当容易的.
有人可以帮助我吗?
我正在寻找一些用于在JSF托管bean中设置属性的代码.我的第一个想法是这样的:
<c:set var="#{loginBean.device}" value="mobil"></c:set>
Run Code Online (Sandbox Code Playgroud)
这意味着我想将属性device设置为值,"mobil"而不必单击按钮.
这可能是一种架构问题,但它仍然必须有一个"最佳实践解决方案"或一个公认的标准.
我在谈论需要在网站上显示的某种静态数据,例如产品目录,菜单和菜单项列表,面包屑块列表等.我想这个选项在使用任何标准CMS时都可用.
但是我想在这个问题上使用纯JSF解决方案.
所以,回到这个问题,我的阐述源于以下原则:
数据不应该在facelets中进行硬编码,因此我使用数据库来保存值,就像在下面的db脚本中一样(在我的例子中是MYSQL):
CREATE TABLE CatalogueGroup (
CatalogueGroupName VARCHAR(100) NOT NULL PRIMARY KEY,
URLPath VARCHAR(200) NOT NULL,
ParentGroupName VARCHAR(100) DEFAULT NULL,
FOREIGN KEY (ParentGroupName) REFERENCES CatalogueGroup(CatalogueGroupName) ON UPDATE CASCADE ON DELETE SET NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)然后我想使用实体类保存在@ManagedBean中并将其显示在视图中,如
public class CatalogueGroup implements Serializable {
private String catalogueGroupName;
private List<CatalogueGroup> children = new ArrayList<CatalogueGroup>();
private CatalogueGroup parentGroup;
//other stuff of this bean
}
@ManagedBean
@SessionScoped
public class CatalogueBean implements Serializable {
private CatalogueGroup catalogue;//loaded via CatalogueGroupDAO with condition parentGroup == …Run Code Online (Sandbox Code Playgroud)我正在jsf页面上测试组件"SelectOneMenu".我通过我的ManageBean(将从数据库中获取所有动物)以dinamically填充此组件.
我想知道是否有可能看到用户选择的那个"SelectOneMenu"(组合框),我正在尝试使用value ="#{animalsManage.animalSelect}",但它只在页面的开头调用.另外,我正在使用inputText来查看"SelectOneMenu"的选定内容的值.
我做错了什么?
JSF:
<body>
<ui:component>
<h:form>
<h:outputText value="Select one Mets File" />
<h:selectOneMenu id="combo" value="#{animalsManage.animalSelected}">
<f:selectItem itemLabel="Select..." noSelectionOption="true"/>
<f:selectItems value="#{animalsManage.allAnimals}" />
</h:selectOneMenu>
<h:inputText id="textbox" value="#{animalsManage.animalSelected }" />
</h:form>
</ui:component>
</body>
Run Code Online (Sandbox Code Playgroud)
ManageBean:
@ManagedBean
@ViewScoped
public class AnimalsManage implements Serializable {
@EJB
private AnimalsFacadeREST animalsFacadeREST;
private String animalSelected;
private List< SelectItem> selectAnimals;
public List<SelectItem> getAllAnimals() {
List<Animals> al = animalsFacadeREST.findAll();
selectAnimals = new ArrayList< SelectItem>();
int i = 0;
for (Animals animal: al) {
selectAnimals.add(new SelectItem(i, animal.getName()));
i++;
}
return …Run Code Online (Sandbox Code Playgroud) 我尝试使用JSF 2进行联合Spring 3(MVC).我在Spring和JSF中有一些经验,但之前从未尝试过加入它们.最后我有2个文件
@ManagedBean(name = "userBean")
@Scope
@Component
public class someBean {
@Autowired
private TestService testService;
public void printString() {
System.out.println(testService.getString());
}
}
Run Code Online (Sandbox Code Playgroud)
和
@ManagedBean(name = "studentBean")
@Scope
@Component
public class StudentBean {
@Autowired
private TestService testService;
public void printString() {
System.out.println(testService.getString());
}
}
Run Code Online (Sandbox Code Playgroud)
对于这些文件,我有正确的spring,jsf和web.xml配置.并有.xhtml页面,我为'someBean'和'StudentBean'启动printString().我在第一种情况下使用NPE,在第二种情况下在控制台中使用"some string".原因很简单 - Spring上下文和JSF中的bean名称不同.所有问题都完成了
@Component => @Component("userBean")
public class someBean {
Run Code Online (Sandbox Code Playgroud)
在调试中我看到了
private TestService testService;
@Autowired
public void setTestService(TestService testservice) {
this.testService = testService;
}
Run Code Online (Sandbox Code Playgroud)
当JSF bean创建的testService集不为null时,但在JSF生命周期中它为null时
public void pringString() {
testService.blah();
}
Run Code Online (Sandbox Code Playgroud)
testService为null.这是我无法理解的.有谁深入了解Spring和JSF详细描述这种情况?
我有这个Managed bean:
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.sql.DataSource;
import javax.annotation.Resource;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
// or import javax.faces.bean.ManagedBean;
import org.glassfish.osgicdi.OSGiService;
@Named("ApplicationController")
@SessionScoped
public class Tab1Page implements Serializable {
public String actionString;
public Tab1Page() {
}
public static final long serialVersionUID = 254415216070877770L;
// Constants
public final static String hashKey = "tab1PageTab";
public String actApplicationControllerionString = "";
@PostConstruct
public void post() {
Format formatter;
Date date = new Date(); …Run Code Online (Sandbox Code Playgroud) 我是java的新手(学习JSF和其他JAVA EE组件)并且有一个非常基本的问题.
当Beans可以完成很多事情时,为什么我们需要一个Servlet.Servlet中有什么不能从Bean完成,或者在基于Web的应用程序中如何比Beans更好地使用Servlet.
我仍然不清楚JSF immediate evaluationvs 的使用deferred evaluation,主要是因为在线示例几乎从未使用过前一种方法.
我已经看到了相当多的JSF示例,包括http://docs.oracle.com/javaee/6/tutorial/doc/中包含的那些示例,我有点困惑的事实是我几乎只看到了一些示例#{}而不是${},即使我们正在做的只是读取bean属性.
从我对这两个用途的理解,${}只能用于读取bean属性,而不是用于编写.我还没有找到关于JSF生命周期的immediatevs deferred评估的确切差异以及读取bean属性会有什么区别的明确解释.
如果每个人总是使用#{}for read bean属性,你何时会推荐使用${}?
所以,总结一下:
#{}在${}当读取 bean的属性?${}而不是#{}?${}结果与使用#{}的结果不同(你可以解释为什么结果不同)?managed-bean ×10
jsf ×5
jsf-2 ×3
el ×2
java ×2
attributes ×1
converter ×1
faces-config ×1
glassfish ×1
html ×1
jstl ×1
properties ×1
servlets ×1
spring ×1