问题:如果我使用的是SessionScoped bean,代码可以工作,但如果我使用的是ViewScoped bean则不可以。我将System.out.println()添加到代码中,以查看发生了什么。如果我将bean设置为SessionScoped,那么一切都按计划工作。inputText值通过set方法设置,processOrder()方法将“OrderName”字符串添加到“Orders”列表中,并重新呈现DataTable以显示添加的名称。...
对于视域bean,“ordername”值被设置为InputText组件的值,但在ProcessOrder()方法中为“null”,将“null”添加到“orders”列表中,并且DataTable除了null之外没有任何可显示的内容。
如果在添加“orderName”之前,我在processOrder()中手动添加orderName,Orders.add(“some name”),那么“Orders”将保存{“some order”,“null”},并且对Orders的更改仍然不会用Ajax重新呈现。
使用SessionScoped bean而不是使用ViewScoped bean都能很好地工作?我也用CommandLink而不是ActionListener尝试了一个Action属性,同样的故事…适用于SessionScoped,但不适用于ViewScoped。
我在这里只能想到两件事,1)我在AJAX和CommandLink如何协同工作以及ViewScoped如何工作方面缺少了一个关键点(很有可能);或者2)出于某种原因,我如何用CommandLink提交AJAX调用它每次单击时都会刷新页面,从而抹去“Orders”列表的先前值。然而,这仍然不能解释为什么如果我手动在列表中输入订单,它仍然不是用ViewScoped bean在AJAX请求中呈现,而是用SessionScoped bean呈现。
救命啊!!??
下面是我的代码:
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
@Named(value = "testBean")
@ViewScoped
public class DataTableTest implements Serializable {
private String orderName;
private List<String> orders = new ArrayList<String>();
public DataTableTest () {}
public String getOrderName() {
return orderName;
}
public void setOrderName(String orderName) {
this.orderName = orderName;
System.out.println(orderName + " in setOrderName");
}
public List<String> getOrders() {
return orders;
}
public String processDataTable(ActionEvent event) {
System.out.println(orderName + " before getting added to orders list in processDataTable");
orders.add(orderName); // adds the orderName to the orders list, so it can be viewed in the DataTable
orderName = null; // nulling variable so it displays BLANK once again on the form
// Loops through and displays order names in the orders list
for (String name : orders) {
System.out.println(name + " in orders List");
}
return null;
}
}
下面是我的jsf页面:
<?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">
<h:head>
<title>Test</title>
</h:head>
<h:body>
<h:form>
<h:panelGrid columns="3">
<h:outputText value="Enter Order Name >>" />
<h:inputText id="orderName" value="#{testBean.orderName}" label="# {testBean.orderName}" />
<h:message for="orderName" />
</h:panelGrid>
<h:commandLink value="Enter Order" actionListener="#{testBean.processDataTable}">
<f:ajax execute="orderName dataTable" render="orderName dataTable" />
</h:commandLink>
<h:dataTable id="dataTable" value="#{testBean.orders}" var="order">
<f:facet name="header">Orders Entered Shown Below: </f:facet>
<h:column>
<h:outputText value="#{order}" />
</h:column>
</h:dataTable>
</h:form>
</h:body>
</html>
您使用的是CDI-Bean,但是您使用的@viewscoped-注释是特定于JSF的,在CDI-Bean中不起作用。
您可以使用JSF-managedBean
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
@ManagedBean(name="testBean")
@ViewScoped
public class DataTableTest implements Serializable { .. }
如果您不能选择更改为managedBean,那么可以查看特定于CDI的@ConversationScope或Seam,其中有一个@ViewScoped注释,它也可以很好地与CDI-Beans一起使用。
我正在尝试让Spring Boot与JSF一起工作。FacesServlet被初始化,网站用PrimeFaces正确呈现。但是在我调用JSF或Spring-Bean时,没有显示任何内容。 我知道这个问题被问了很多次,但都没有解决我的问题。经过几个小时的搜索,我还是没有找到工作。我是不是漏掉了什么? 设置: null null jsfbean.java SpringBean.java index.x
问题内容: 我目前正在实现一个小型Spring MVC PoC,并且我想使用JSF作为视图技术,因为我公司中的大多数人都习惯于带有Primefaces环境的J2EE。 Spring MVC 3是否支持JSF或仅支持JSP?我读过多篇文章,将两者混为一谈。 我需要创建一个吸引人的UI。使用Spring MVC和JSP作为视图技术,是否有一种简单的方法? 我们的应用程序在多个页面中使用时间表/日历。这
我正在使用带有PRG模式的JSF。(在我的导航规则中使用)。 问题是,当我收到验证错误(例如:用户未设置强制值)时,重定向没有完成(即,一篇文章后面跟着同一页的get)。 情况是: > 用户没有输入强制值并提交表单 发生验证错误,同一视图显示错误消息(无PRG) 用户设置强制值并提交== 用户点击后退按钮= 谁能帮帮我吗? 提前感谢。 斯特凡
主要内容:映射Faces ServletFacelets视图是页面。 您可以通过向页面添加组件来创建网页或视图,将组件连接到后端的值和属性,并在组件上注册转换器,验证器或侦听器。 网页作为前端。 您的应用程序的第一页默认为。 网页(如,在中)的第一部分声明页面的内容类型,即XHTML: 一个完整的文件:index.xhtml 代码内容如下所示 - Facelets HTML标签以开头,用于在网页和核心标签上添加组件用于验证用户输入。 标
我在bitbucket上有一个私有的存储库,其中有一些python代码,是我用git从命令行提取的。然后我将该项目导入Pycharm 2016.3。从命令行我可以推拉,但Pycharm中的git似乎不起作用。我会遇到以下错误:我正在使用ssh身份验证,并且我已将我的.ssh/config设置为使用正确的私钥解析Bitbucket.org。我还将Pycharm配置为使用本机ssh,而不是内置ssh。
我现在的目标是创建一个网格,这将是我的游戏的基础。当玩家从菜单开始游戏时,这个网格应该出现在游戏场景上。稍后,我希望能够根据用户输入更改电路板的大小 1.在eventhandler中创建网格 我的推理是当玩家点击启动游戏的“SinglePlayer”按钮时创建网格。根据这个推理,我将简单地获取根节点(一个组)的子节点,并将gridpane添加到其中 为什么我被困住了 下面的代码段显示处理on bu