Ajax Richfaces 3.3/JBoss Seam 2.2。动态加载多个组合框
我有三个组合框。第一个由值填充。当我从中选择一个值时,第二个值必须更新。之后,当我从第二个组合中选择一个值时,应该填充第三个组合。我知道这已经被传达了,但是有两个组合。如果超过两个,它就不起作用了。你能告诉我什么地方我做得不好吗 以下是视图:Ajax Richfaces 3.3/JBoss Seam 2.2。动态加载多个组合框,ajax,combobox,richfaces,Ajax,Combobox,Richfaces,我有三个组合框。第一个由值填充。当我从中选择一个值时,第二个值必须更新。之后,当我从第二个组合中选择一个值时,应该填充第三个组合。我知道这已经被传达了,但是有两个组合。如果超过两个,它就不起作用了。你能告诉我什么地方我做得不好吗 以下是视图: <h:form> <h:panelGrid columns="2"> <h:outputText value="Choose the produce type:"/>
<h:form>
<h:panelGrid columns="2">
<h:outputText value="Choose the produce type:"/>
<h:selectOneMenu id="firstList"
value="#{userBean.firstItem}"
valueChangeListener="#{userBean.valueChanged}">
<f:selectItems value="#{userBean.firstList}"
var="element"
itemLabel="#{element.label}"
itemValue="#{element.value}" />
<a4j:support reRender="outputPanel"
event="onchange"
ajaxSingle="true"
bypassUpdates="false" />
</h:selectOneMenu>
<a4j:outputPanel id="outputPanel">
<h:selectOneMenu value="#{userBean.secondItem}"
valueChangeListener="#{userBean.valueChanged}">
<f:selectItems value="#{userBean.secondList}"
var="element"
itemLabel="#{element.label}"
itemValue="#{element.value}" />
<a4j:support reRender="outputPanel"
event="onchange"
ajaxSingle="true"
bypassUpdates="false" />
</h:selectOneMenu>
<h:selectOneMenu value="#{userBean.thirdItem}"
valueChangeListener="#{userBean.valueChanged}">
<f:selectItems value="#{userBean.thirdList}"
var="element"
itemLabel="#{element.label}"
itemValue="#{element.value}" />
</h:selectOneMenu>
</a4j:outputPanel>
</h:panelGrid>
</h:form>
这就是Bean(这是一个没有任何意义的示例代码):
@Name(“userBean”)
公共类用户bean
{
@记录器私有日志;
@在状态消息中,状态消息;
私有字符串firstItem=“”;
私有字符串secondItem=“”;
私有字符串thirdItem=“”;
public List firstList=new ArrayList();
public List secondList=new ArrayList();
public List thirdList=new ArrayList();
私有静态最终字符串[]水果={“香蕉”、“蔓越莓”、“蓝莓”、“橙子”};
私有静态最后字符串[]蔬菜={“土豆”、“花椰菜”、“大蒜”、“胡萝卜”};
私有静态最终字符串[]GIRLS={“Victoria”、“Nana”、“Etc…”;
公共用户bean(){
SelectItem项目=新的SelectItem(“水果”、“水果”);
第一个列表。添加(项目);
项目=新选择项目(“蔬菜”、“蔬菜”);
第一个列表。添加(项目);
项目=新选择项目(“女孩”、“女孩”);
第一个列表。添加(项目);
for(int i=0;i
问题是,当我从第二个组合框中选择一个值(其中的值是动态加载的)时,页面被重新加载(而不是执行ajax请求),我有一个异常:
请求处理期间出现异常:
由javax.servlet.ServletException引起,消息为:“java.util.NoSuchElementException”
第二个列表从第一个列表成功更新,但之后出现问题
提前谢谢!
干杯!确保您的bean的范围比请求的范围更广,比如会话范围。看起来您使用的是JSF 1.2,在这种情况下,RichFaces有一个
标记组件来将托管bean的范围从请求提升到视图(在幕后使用会话变量)。此选项可能是您所需要的。有两种方法可以实现它
<a4j:keepAlive bean="userBean" />
<h:form>
<h:panelGrid columns="2">
<!-- the rest of your code... -->
注意:要使用这个标记(作为组件或注释),bean必须有请求范围。嗨,Luiggi,谢谢你的回复!我不知道有这样的标记存在。我把它放在表单对象之前,它就工作了。有趣的是,bean在对话范围内(Seam对话)它不起作用。只有在贴上标签后它才起作用。我会读到这个标签,但是你能回答我吗,为什么在对话状态下它不起作用?非常感谢!!!这个问题困扰了我一个星期。干杯!我从这个开始,在keepAlive标签的范围或使用上我没有看到任何区别。@niki4ko你应该检查一下。
<a4j:keepAlive bean="userBean" />
<h:form>
<h:panelGrid columns="2">
<!-- the rest of your code... -->
@Name("userBean")
@KeepAlive
public class UserBean {
//your managed bean code...
}