`
dontsan
  • 浏览: 41858 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

a4j and SelectOneMenu again

阅读更多
原来想用a4j和richfaces做一点rich应用,没想到动态填充SelectItems的SelectOneMenu不能绑定值到bean。错误提示"value is not valid"。有人说是转换的时候出了问题要重写equal函数,但是我只使用字符串作为SelectItem的 label and key. 难道字符串之间也不能比较吗?不能再浪费时间了,以后有时间找到JSF的源码看看。现在还是老老实实多做几个页面算了。

页面:
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
                             "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:s="http://jboss.com/products/seam/taglib"
	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:a="http://richfaces.org/a4j"
	xmlns:rich="http://richfaces.org/rich" template="layout/template.xhtml">

	<ui:define name="body">

		<div class="title"><h:outputText
			value="View dealers in a region" /></div>

		<h:form id="forma">
			<h:outputText value="Please select a country:" />
			<h:selectOneRadio value="#{Regions.country}">
				<f:selectItem itemLabel="USA" itemValue="USA" />
				<f:selectItem itemLabel="CANADA" itemValue="CANADA" />
				<a:support event="onchange" reRender="regionPanel" />
			</h:selectOneRadio>
		</h:form>

		<h:form id="formb">
			<a:outputPanel id="regionPanel">
				<s:decorate id="regionDecoration" template="layout/display.xhtml">
					<ui:define name="label">Select a region:</ui:define>
<!--					<h:selectOneMenu id="selectRegion" value="#{dealerList.region}"	converter="SelectItemConverter">-->
						<rich:comboBox id="selectRegion" value="#{dealerList.region}"
							converter="SelectItemConverter">
							<f:selectItems value="#{Regions.regionItems}" />
						</rich:comboBox>
<!--					</h:selectOneMenu>-->

				</s:decorate>
			</a:outputPanel>

			<div class="actionButtons"><a:commandButton
				id="showDealersButton" reRender="dealerResults" value="Show Dealers">
			</a:commandButton> <a:commandButton id="showAllDealersButton" reRender="dealerResults"
				value="Show All Dealers" action="#{dealerList.setRegion('%')}">
			</a:commandButton></div>
		</h:form>

		<h:messages globalOnly="true" styleClass="message" />
		<a:outputPanel id="dealerResults">
			<h:outputText value="OutText:Current region is: #{dealerList.ejbql}" />
			<h:inputText
				value="InputText:Current region is: #{dealerList.region}" />

			<rich:panel>
				<f:facet name="header">dealerList</f:facet>

				<div class="results"><h:outputText value="No dealer exists"
					rendered="#{empty dealerList.resultList}" /> <h:dataTable
					id="dealerList" var="dealer" value="#{dealerList.resultList}"
					rendered="#{not empty dealerList.resultList}">
					<h:column>
						<f:facet name="header">Id</f:facet>
						<h:outputText id="dealderId" value="#{dealer.id}">
						</h:outputText>
					</h:column>
					<h:column>
						<f:facet name="header">Name</f:facet>
						<s:link id="dealer" value="#{dealer.name}" view="/dealer.xhtml">
							<f:param name="dealerId" value="#{dealer.id}" />
						</s:link>
					</h:column>
					<h:column>
						<f:facet name="header">Region</f:facet>
						<h:outputText id="region" value="#{dealer.region}"></h:outputText>
					</h:column>
				</h:dataTable></div>
			</rich:panel>
		</a:outputPanel>

		<div class="actionButtons"><s:button id="done"
			value="Create dealer" view="/dealer.xhtml" /></div>

	</ui:define>

</ui:composition>





RegionBean:

package com.govr.catalog.session;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.Remove;
import javax.ejb.Stateful;
import javax.ejb.Stateless;
import javax.faces.model.SelectItem;

import org.jboss.seam.annotations.Destroy;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.log.Log;
import org.jboss.seam.faces.FacesMessages;

import com.govr.catalog.entity.CanadaProvinces;
import com.govr.catalog.entity.USAStates;

//@Stateless
@Stateful
@Name("Regions")
public class RegionsBean implements Regions {

	@Logger
	private Log log;

	@In
	FacesMessages facesMessages;

	public void regions() {
		// implement your business logic here
		log.info("Regions.regions() action called");
		facesMessages.add("regions");
	}

	private String country;
	private String selectARegionLabel;

	public List getRegionList(String country) {

		List l = new ArrayList();
	
		if ("USA".equals(country))
			l = USAStates.getRegionList();

		if ("CANADA".equals(country))
			l = CanadaProvinces.getRegionList();

		return l;

	}

	public Map getRegionMap(String country) {

		Map l = new HashMap();

		if ("USA".equals(country))
			for (String s : USAStates.states)
				l.put(s, s);

		if ("CANADA".equals(country))
			for (String s : CanadaProvinces.states)
				l.put(s, s);

		return l;

	}

	public List getRegionList() {

		List l = new ArrayList();

		if ("USA".equals(country))
			l = USAStates.getRegionList();

		if ("CANADA".equals(country))
			l = CanadaProvinces.getRegionList();

		return l;

	}

	public List<SelectItem> getRegionItems() {

		 List<SelectItem>  l = new ArrayList<SelectItem>();
//		l.add(new SelectItem(""));
		if ("USA".equals(country)) {
			for (String s : USAStates.states)
				l.add(new SelectItem(s,s));
			setSelectARegionLabel("Please select a state:");
		} else if ("CANADA".equals(country)) {
			for (String s : CanadaProvinces.states)
				l.add(new SelectItem(s,s));
			setSelectARegionLabel("Please select a provice:");

		} else {
			l.add(new SelectItem("No region to show","No region to show"));
		}
		return l;
	}

	public void setCountry(String country) {
		this.country = country;
	}

	public String getCountry() {
		return country;
	}

	public void setSelectARegionLabel(String selectARegionLabel) {
		this.selectARegionLabel = selectARegionLabel;
	}

	public String getSelectARegionLabel() {
		return selectARegionLabel;
	}

	@Remove
	@Destroy
	public void destroy() {
	}

	// add additional action methods

}



DealerList:

package com.govr.catalog.session;

import javax.faces.model.SelectItem;

import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.web.RequestParameter;
import org.jboss.seam.framework.EntityQuery;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.ScopeType;

@Name("dealerList")
@Scope(ScopeType.CONVERSATION)
public class DealerList extends EntityQuery {
	
//	@RequestParameter
//	String region = "";

//	@In
	private String region;
	private SelectItem selectedRegionItem;
	
	@Override
	public String getEjbql() {

			setRegion(((String)getRegion()).trim());
			return "select dealer from Dealer dealer where dealer.region like '"
				+ getRegion() + "'";
	}


	public void setRegion(String region) {
		this.region =  region;
	}


	public String getRegion() {
		if (region == null)
			setRegion("");
		return  region;
	}


	public void setSelectedRegionItem(SelectItem selectedRegionItem) {
		this.selectedRegionItem = selectedRegionItem;
		setRegion((String) this.selectedRegionItem.getValue());
	}


	public SelectItem getSelectedRegionItem() {
		return selectedRegionItem;
	}

}

分享到:
评论

相关推荐

    <h:selectOneMenu>与<a4j:support>的集合运用(JSF)

    在JSF(JavaServer Faces)框架中,`&lt;h:selectOneMenu&gt;` 是一个用于创建下拉选择框的组件,而 `&lt;a4j:support&gt;` 是RichFaces库提供的一种Ajax支持的标签,它允许我们实现页面的部分更新,提高用户体验。这篇博客文章...

    用selectOneMenu标签开发级联选择

    本篇将深入探讨如何使用`&lt;h:selectOneMenu&gt;`标签来实现这种功能,该标签是JavaServer Faces (JSF)框架的一部分。 ### JSF `&lt;h:selectOneMenu&gt;`标签介绍 `&lt;h:selectOneMenu&gt;`是JSF中用于创建单选下拉列表的组件。它...

    selectOneMenu 在column內 如果還有其他元件 位置不一致的處理方式1

    "selectOneMenu"是一个常见的下拉选择框组件,在某些情况下,它可能会与其他元素的对齐方式出现不一致,这通常涉及到CSS样式和布局设置。本文将详细探讨这个问题的原因以及解决方案。 ### 问题分析 问题描述中的...

    richfaces标签例子

    `&lt;h:selectOneMenu&gt;`允许用户选择日期的显示格式,通过`onchange`事件和`a4j:support`,当选择改变时,日历的日期格式会同步更新。 这些例子展示了RichFaces的强大功能,包括与后台bean的双向数据绑定、AJAX更新...

    myfaces标签库

    7. **`&lt;a4j:commandLink&gt;`**: 类似于`&lt;a4j:commandButton&gt;`,但表示为链接形式。 8. **`&lt;h:form&gt;`**: 包裹表单元素,处理表单提交。 9. **`&lt;f:view&gt;`**: 设置视图根元素,控制页面生命周期。 #### 五、示例:使用...

    设置jsf的选择框h:selectOneMenu为不可编辑状态的方法

    在JSF(JavaServer Faces)框架中,`h:selectOneMenu` 是一个用于创建下拉选择框的组件。在某些场景下,我们可能需要将这个组件设置为只读或不可编辑状态,以便用户只能查看选项,而不能进行选择。本文将详细讲解...

    Practical RichFaces, 2nd Edition

    - **第3章:a4j:* 标签、特性和概念** - 探讨了a4j命名空间中的标签,这些标签为JSF带来了AJAX支持。 - **第4章:开始使用Rich组件** - 介绍RichFaces提供的各种组件及其基本用法。 - **第5章:富输入和选择组件** -...

    jsf实用代码

    在实际开发中,JSF的这些选择组件常常与EL(Expression Language)和CDI(Contexts and Dependency Injection)结合使用,以实现动态选项加载、验证和转换等功能。开发者还可以自定义组件和渲染器,以满足特定的界面...

    qfaces 使用方法 WORD版

    通过这种方式,开发者可以无限扩展 `h:selectOneMenu`,实现无限级联选择,极大地增强了 JSF 应用的灵活性和用户体验。 QFaces 的安装和使用可以通过提供的链接获取详细指南。对于希望深入理解 JSF 自定义组件的...

    primefaces-selenium:PrimeFaces对Selenium的测试支持

    素面Selenium 基于JUnit5,Selenium和页面对象/碎片概念的PrimeFaces测试支持。 它还支持JUnit5并行测试执行,以加快测试速度。 PrimeFaces-Selenium提供了一个挂钩,以启动本地服务器,使用远程地址并实例化...

    seam级连菜单20080610.rar

    级联菜单的前端部分可能就是由JSF的组件实现,例如使用h:selectOneMenu或p:selectOneMenu(PrimeFaces扩展)。 2. **CDI(Contexts and Dependency Injection)**: CDI是Java EE中的依赖注入标准,Seam完全支持CDI...

    設定Style讓標準的JSF元件比較像Primefaces1

    &lt;h:selectOneMenu id="selType" value="#{authfile.queryFileType}" disabled="#{authfile.showResult}" styleClass="ui-inputfield ui-widget ui-state-default ui-corner-all" accesskey="2" title="#{msg['...

    PrimeUI Widgets

    Log4J适配器;FacesMessage监听器;组件树可视化查看器。 PrimeUI是一套JavaScript Widget控件,可用于创建UI。PrimeUI是把原PrimeFaces的组件进行解耦,提取出来的JS控件可以用于PHP、ASP、 Wicket、GWT等等的开发...

    JSF_2_简介

    这是通过在`h:selectOneMenu`标签中添加`onchange`属性来实现的: ```xml &lt;h:selectOneMenu onchange="submit()"&gt; ... &lt;/h:selectOneMenu&gt; ``` 这里,`submit()`函数触发了一个Ajax请求,使得地图可以在用户更改...

    JSF2开发代码示例

    - **Input components**:如`&lt;p:inputText&gt;`、`&lt;p:selectOneMenu&gt;`等,提供了丰富的输入控件。 - **Ajax支持**:PrimeFaces的组件通常内置了Ajax功能,例如`&lt;p:commandButton&gt;`,可以通过异步更新页面部分,提升...

    JSF标签详解(一个不漏).doc

    selectItem标签用于指定UISelectOne或UISelectMany组件的一个项目,用来为h:selectOneMenu等选择性组件设置选择数据项。示例代码: ``` &lt;h:selectOneMenu value="#{bean.selectedItemValue}"&gt; &lt;/h:selectOneMenu&gt;...

    jsf的初步使用(包括jsf框架的引入、用户登录、自定义表单验证、valueChangeEvent值变更事件处理做的级联下拉框,内有jsf的jar包)

    &lt;h:selectOneMenu id="country" value="#{bean.country}"&gt; &lt;/h:selectOneMenu&gt; &lt;h:selectOneMenu id="city" value="#{bean.city}"&gt; &lt;/h:selectOneMenu&gt; ``` 在后台,`onCountryChange`方法更新城市列表: ```...

    jsf常用标签整理

    robStrategy(String probeStrategy) { this.probeStrategy = probeStrategy; }}(2) 如果下拉列表的内容不是固定的,而是需要从后台动态加载,...例如:&lt;h:selectOneMenu value="#{ConfInitFTPVBean.probeStrategy}"&gt; ...

    standard_jsf_tags.pdf

    - **选择标签 (`&lt;h:selectOneMenu&gt;`, `&lt;h:selectManyCheckbox&gt;`)**:提供用户进行单选或多选的功能。 - **消息 (`&lt;h:message&gt;`)**:显示验证错误或其他消息。 - **面板 (`&lt;h:panelGrid&gt;`, `&lt;h:panelGroup&gt;`)**:用于...

Global site tag (gtag.js) - Google Analytics