原来,faces-config.xml覆盖了我的Controller类中带有RequestScoped的内联注释ViewScoped。修正了它,似乎解决了这个问题。
这个问题在commandButton/commandLink/ajax action/listener method not invoked or input value not updated没有答案,如果您认为有,请使用primefaces fluidGrid扩展提供一个有效的修复/示例。
我正在使用primefaces ui exension fluidGrid:http://fractalsoft.net/primeext-showcase-mojarra/sections/fluidgrid/dynamic.jsf
我似乎无法调用profileController.testControl(),如果我将commandButton放在fluidGrid之外它工作正常,但不在网格内。有任何想法吗?
我已经通过将我的bean更改为@ViewScoped来测试,没有嵌套的表单等。
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
xmlns:p="http://primefaces.org/ui"
xmlns:pe="http://primefaces.org/ui/extensions"
xmlns:composite="http://java.sun.com/jsf/composite">
<composite:interface>
<composite:attribute name="resultList" />
</composite:interface>
<composite:implementation>
<h:form id="form1" rendered="true">
<!-- Grid -->
<pe:fluidGrid value="#{resultList}" var="showvar" hGutter="20" rowKeyVar="rowKey" fitWidth="true" hasImages="true" rendered="true" >
<pe:fluidGridItem rendered="true" >
<p:panel id="seriesPanel" rendered="#{showvar.isSeries()}"></p:panel>
<p:panel id="episodePanel" rendered="#{!showvar.isSeries()}" >
<p:commandButton value="click me" action="#{profileController.testControl()}"/>
<!-- another button attempt that doesn't work -->
<p:commandButton process="fluidGrid" value="click me again" ajax="false" actionListener="#{profileController.testControlEvent()}" />
</p:panel>
</pe:fluidGridItem>
</pe:fluidGrid>
</h:form>
</composite:implementation>
</html>
//Tried with @ViewScoped as well
@Model
public class ProfileController {
public void testControl(){
log.info("---------------------------------------");
log.info("TEST CONTROL CLICKED");
log.info("---------------------------------------");
}
public void testControlEvent(ActionEvent actionEvent){
log.info("---------------------------------------");
log.info("TEST CONTROL CLICKED");
log.info("---------------------------------------");
}
}
答案 0 :(得分:1)
我已经尝试了在fluidGrid中使用命令按钮的简单示例,它可以在这里工作。
XHTML文件
<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:pe="http://primefaces.org/ui/extensions"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<h:form id="login">
<pe:fluidGrid value="#{tBean.images}" var="showvar" hGutter="20"
rowKeyVar="rowKey" fitWidth="true" hasImages="true" rendered="true">
<pe:fluidGridItem rendered="true">
<p:commandButton value="click me" action="#{tBean.doAction}" />
</pe:fluidGridItem>
</pe:fluidGrid>
</h:form>
</h:body>
</html>
ManagedBean代码
package bean;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.primefaces.extensions.model.fluidgrid.FluidGridItem;
@ManagedBean(name = "tBean")
@ViewScoped
public class TestBean implements Serializable{
private List<FluidGridItem> images;
@PostConstruct
protected void initialize() {
images = new ArrayList<FluidGridItem>();
for (int j = 0; j < 3; j++) {
for (int i = 1; i <= 10; i++) {
images.add(new FluidGridItem("i" + 1));
}
}
}
public void doAction() {
System.out.println("Im doing action");
}
public List<FluidGridItem> getImages() {
return images;
}
}
尝试上面,看看它是否适合你。如果它有效,那么尝试在您的实现中使用。
答案 1 :(得分:0)
我有时会遇到渲染问题,并且没有调用按钮。确保您的rendered="#{!showvar.isSeries()}"
工作正确或删除它,然后再试一次。
答案 2 :(得分:0)
你必须在你的页面添加中更新我认为的表格 在按钮update =“:form1:fluidGrid”如果剂量工作使ajax为true它有助于解决这样的问题我希望它会帮助你