随笔-348  评论-598  文章-0  trackbacks-0
这个方法不是太完美,但可以解决JSF的DataTable和SelectOneRadio搭配问题。每条记录每一行一个radio进行单选,只会选中一条。
首先,在页面中datatable的column中加入
                                            <h:selectOneRadio id="xx" value="#{entrance.test}">
                                                
<f:selectItem itemValue="#{obj.corpOutInfo.coiId}" itemLabel="#{obj.corpOutInfo.corpName}"/>
                                            
</h:selectOneRadio>
然后加入一段jquery的代码用于在用户切换选择的时候,先将所有radio的checked状态都置为false。
<script type="text/javascript">
        jQuery.noConflict();
//与JSF搭配需要这句话,不然会有冲突
        jQuery(document).ready(function() {

            jQuery(
":radio").click(function(){
                update(
this);

             }
);
        }
);
        
</script>
        
<script type="text/javascript">
        
function update(currentRadio)
        
{

            
var parentTables = jQuery(currentRadio).parents("table"); 
            
var parentTable = parentTables[0];    

            
var childDivs = jQuery(parentTable).next("div");        
            
var childDiv = childDivs[0];        

            jQuery(childDiv).contents().find(
":radio").each(function() {
                
this.checked = false;
            }
);
            
            currentRadio.checked 
= true;
        }


        
</script>

后台绑定一个属性,但这个属性的set方法会被调用多次,但只有一次是有值的,所以用户选择了哪一行也好获得。
    private String test;
    
    
public String getTest() {
        
return test;
    }


    
public void setTest(String test) {
        System.out.println(
"=========================" + test);
    }


    
问题算是解决了,实现很简单,但并不太完美。因为后台的那个set方法会触发很多次,次数跟当前的radio数量一致,虽然不怎么影响性能,但用着总觉得不爽,后面再完善下。


---------------------------------------------------------
专注移动开发

Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
posted on 2009-01-11 16:36 TiGERTiAN 阅读(5442) 评论(5)  编辑  收藏 所属分类: JavaJSF

评论:
# re: JSF中DataTable和SelectOneRadio搭配,每条记录每一行一个radio进行单选的解决办法 2009-01-12 12:39 | 千里冰封
直接用h:outputText画出HTML语句,这样岂不是更好,然后在后台从parameter里面去取这个单选的参数,应该也是一种办法,呵呵  回复  更多评论
  
# re: JSF中DataTable和SelectOneRadio搭配,每条记录每一行一个radio进行单选的解决办法[未登录] 2009-01-12 21:38 | tigertian
@千里冰封
有个问题,就是你这个方法只能在jsf 1.2中使用,貌似1.1中没有escape属性,所以默认escape为true,在output里面画不出来,会被Html Encode掉,如果单独使用<input type="radio">控件,会发现jsf 1.1中的datatable无法把这个纯html控件包含进来。而我目前碰到的应用环境正是jsf 1.1,所以我也想找到一个更好的办法,大家讨论讨论哈。  回复  更多评论
  
# re: JSF中DataTable和SelectOneRadio搭配,每条记录每一行一个radio进行单选的解决办法 2009-01-13 08:48 | TiGERTiAN
@千里冰封
今天测试了一下,1.1版本的outputText也有escape属性,但我忘记是哪个控件跟1.2不一样没有escape属性的,有了之后,就可以画出来了。  回复  更多评论
  
# re: JSF中DataTable和SelectOneRadio搭配,每条记录每一行一个radio进行单选的解决办法 2009-12-27 21:28 | frankie
# re: JSF中DataTable和SelectOneRadio搭配,每条记录每一行一个radio进行单选的解决办法 2009-12-27 22:17 | TiGERTiAN
@frankie
谢谢哈,不过我用的是sun的实现。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: