我在循环HashMap以将其值打印到屏幕上时遇到了一些麻烦.有人可以仔细检查我的代码,看看我做错了什么.我似乎找不到任何错误,但必须有一些东西.
在servlet中,我将以下内容添加到请求中:
Map<String, String> facetValues = new HashMap<String, String>();
// Filling the map
req.setAttribute(facetField.getName(), facetValues);
Run Code Online (Sandbox Code Playgroud)
在一种情况下,"facetField.getName()"评估为"纪律".所以在我的页面中我有以下内容:
<ui:repeat value="${requestScope.discipline}" var="item">
<li>Item: <c:out value="${item}"/>, Key: <c:out value="${item.key}"/>, Value: <c:out value="${item.item}"/></li>
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)
循环运行一次,但所有输出都是空白的?!?如果它已经超过循环一次,我至少会期望项目中的某些东西.检查Facelets的调试弹出窗口,纪律是在那里和循环.将它打印到屏幕会产生一些看起来像我的地图(我缩短了输出):
{300=0, 1600=0, 200=0, ... , 2200=0}
Run Code Online (Sandbox Code Playgroud)
我也尝试过ac:forEach,但我得到了相同的结果.所以有人有任何想法,我出错了吗?
谢谢你的任何意见,李
我有一个JSF页面.有一次,我有一个<h:selectManyCheckbox>显示许多项目.标签提供了2个属性,您可以设置这些属性来定义内容是水平显示还是垂直显示.然而,对于多个项目,两个选项看起来都很糟糕.水平走,一切都结束了.使用垂直方式,您可以使页面不必要地长.有没有办法让两全其美?例如,指定应该有x个列?假设我有20个项目,我想要4列.如果这个数字增加到100,我仍然只想要4列.然后该列表将垂直增长.
这可能吗?
有人可以指向我或解释是否属实,你不能在JSF或JSF库(如RichFaces)中使用普通的HTML标签吗?
我们在JBOSS服务器上使用JSF 1.2,RichFaces 3.3.3和Facelets.
有人对我说,我们只能使用<rich:>或<f:>或<a4j:>和他们所提供的组件.原因是JSF组件树会中断,您可能会有不需要的行为.或者在某些时候失去JSF树结构以及与之相关的功能.
我试图使用普通<h1>标签并被告知不使用它并使用<a4j:outputPanel>替代(渲染为a <div>)并将其设计为看起来像标题.
我很难相信这一点.
我需要使用客户端发送的参数来更改我的网站的上下文.
例如,如果我打电话给http://localhost:8084/JSF/我加载模板index.xhtml上的"主页"页面content(默认情况下).但是,如果我打电话http://localhost:8084/JSF/index.xhtml?page=profile,我需要一种切换index.xhtml,并在我的content区域中包含/插入配置文件模板(或定义配置文件的页面).
我想我需要管理一个servlet才能做到这一点,因为我不认为我可以在index.xhtml中创建一种swith.所以我认为我需要加载一些模板而不是另一个.
我需要使用哪个servlet?或者我需要创建自己的Servlet才能执行此操作?
干杯
更新(在BalusC的建议之后添加)
package Beans;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ManagedBean;
@ManagedBean(name="selector")
@ManagedProperty(value="#{param.page}")
public class Selector {
private String page;
public String getPage() {
return page;
}
public void setPage(String page) {
this.page = page;
}
}
Run Code Online (Sandbox Code Playgroud)
template.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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title><ui:insert name="title">Facelets Template</ui:insert></title>
</h:head>
<h:body>
<ui:insert name="login_homepage">Box Content Here</ui:insert>
<ui:insert name="content_homepage">Box Content …Run Code Online (Sandbox Code Playgroud) 通过文档,看起来像faces-config.xml是必需的.但是,由于某种原因,我认为Facelets使用了注释,因此不需要xml配置(?).他们说:
要将JavaServer Faces配置为使用Facelets作为ViewHandler,请修改项目的faces-config.xml以指定元素
似乎Facelets教程通常是死链接,或者像上面一样,很快就会死链接:(
我在Facelets页面中有以下下拉列表:
<h:selectOneMenu value="#{contactBean.selectedContact}" converter="#{contactConverter}">
<f:selectItems value="#{contactsHolder.contacts}" var="contact"
itemLabel="#{contact.firstName}" itemValue="#{contact}" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
问题是,无论我放入什么itemLabel(JSF EL表达式或纯文本),它都不会显示.知道我做错了什么吗?
这是ContactConverter:
@ManagedBean(name = "contactConverter")
@RequestScoped
public class ContactConverter implements Converter, Serializable {
@ManagedProperty(value = "#{contactsHolder}")
private ContactsHolder contactsHolder;
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
return contactsHolder.getContacts().get(value);
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
return ((Contact) value).getContactID();
}
//getter & setters...
}
Run Code Online (Sandbox Code Playgroud)
而且ContactsHolder:
@ManagedBean
@SessionScoped
public class ContactsHolder implements Serializable {
private Map<String, Contact> …Run Code Online (Sandbox Code Playgroud) 我正在尝试将Mootools(Request.JSON)与JSF一起使用 - 主要是因为我前段时间在CakePHP中编写了一个类似的应用程序,并希望重用大部分JS部分.
有没有办法使用像无标记facelet这样的请求返回纯文本("application/json")?
我想出的唯一解决方案是使用HttpServlet并将其注册到web.xml中的服务URL.这种方法可以正常返回一个没有任何标记的文件,但我更倾向于使用我注入Spring的ManagedProperties,而不是仅限于WebApplicationContextUtils.
我错过了什么或是推荐的方式吗?
我对这段代码有一种非常奇怪的行为:
<ui:fragment rendered="#{price.guestIdTrue}">
<b>PRICE_GUEST_ID_TRUE : #{price.guestIdTrue}</b>
<h:outputText>#{Global.guestTypeMap[price.guestId]} #{price.guestIndex}</h:outputText>
</ui:fragment>
Run Code Online (Sandbox Code Playgroud)
即使渲染条件为假,也是如此
PRICE_GUEST_ID_TRUE:false 1
1是#{price.guestIndex}
ui名称空间已正确定义,并且适用于其他facelets.
<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:p="http://primefaces.org/ui"
xmlns:t="http://myfaces.apache.org/tomahawk">
Run Code Online (Sandbox Code Playgroud)
什么发生的想法.
提前致谢.
当我们在这里使用JSP和servelt开发web应用程序时,servlet充当CONTROLLER(从MVC角度来看).那么当我使用JSF和Facelets开发Web应用程序时,什么充当控制器......
它是与JSF相关的东西 - 请求调度程序servlet - httprequest httpresponse
或者我完全错了.
我已经将JSF2.0用于自动导航系统.我有一个简单的登录页面,当我点击登录按钮时,相应的Bean类的方法已经调用但是当我改变时它不会导航到home.jsp页面从.jsp到xhtml的扩展然后它工作..jsp扩展名有什么问题.
LoginBean.java
public class LoginBean implements Serializable {
private static final long serialVersionUID = 1L;
private String uname;
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String loginProject() {
System.out.println("hello i am called ");
System.out.println(uname);
System.out.println(password);
return "home";
}
}
Run Code Online (Sandbox Code Playgroud)
===============
login.xhtml
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Colonial Inn</title>
</h:head> …Run Code Online (Sandbox Code Playgroud)