Xpages 工具提示为的放射组工作不正常

Xpages 工具提示为的放射组工作不正常,xpages,xpages-ssjs,Xpages,Xpages Ssjs,我的情况与前面的一个问题相同: 但这次只能从相同的数据中选择1个值,所以我想使用收音机而不是复选框 值来自viewScope选项中的“重复” <xp:repeat id="repeat4" rows="100" value="#{viewScope.choices}" indexVar="rownumber" var="row" first="0"> <xp:radio id="radio1" groupName="selection">

我的情况与前面的一个问题相同:

但这次只能从相同的数据中选择1个值,所以我想使用收音机而不是复选框

值来自viewScope选项中的“重复”

<xp:repeat id="repeat4" rows="100" value="#{viewScope.choices}"
    indexVar="rownumber" var="row" first="0">

   <xp:radio id="radio1" groupName="selection">
       <xp:this.text><![CDATA[#{javascript:row[3]}]]></xp:this.text>
       <xp:this.value><![CDATA[#{viewScope.selected[rownumber]}]]></xp:this.value>
   </xp:radio>

   <xe:tooltip id="tooltip3" for="radio1">
        <xe:this.label><![CDATA[#{javascript:return viewScope.choices[rownumber].get(3)}]]></xe:this.label>
   </xe:tooltip>
</xp:repeat>

工具提示似乎正确,但:

1) 如果需要,我可以选择所有的收音机盒,而不是只选择一个

2) 数据似乎没有更新(因此我不知道选择了哪个框)

问题1: 更新:

您必须为repeat控件的每一行计算一个唯一的groupName

您必须为所有单选按钮计算一个通用的
groupName
。 还有一个问题,每个
xp:radio
控件都将使用自己的组名呈现,让我们看看呈现的html代码:

一种可能的解决方法是使用本机html:

<input id="radio1" type="radio" name="selection" value="#{viewScope.selected[rownumber]}">
</input>
AccessControlBean:

public class AccessControlBean implements Serializable {

    public Set<AccessControlEntry> getEntries() {

        Set<AccessControlEntry> entries = new TreeSet<AccessControlEntry>(accessControlUserService.getEntries());
        entries.addAll(accessControlGroupService.getEntries());

        return entries;
    }

    public void accessLevelChanged(ValueChangeEvent valueChangeEvent) {

        XspInputRadio component = (XspInputRadio) valueChangeEvent.getComponent();

        System.out.println("phaseId: " + valueChangeEvent.getPhaseId());

        System.out.println("accessLevelChanged");
        System.out.println(component.getGroupName());
        System.out.println("oldValue: " + valueChangeEvent.getOldValue());
        System.out.println("newValue: " + valueChangeEvent.getNewValue());

    }

}
公共类AccessControlBean实现可序列化{
公共集合getEntries(){
Set entries=new TreeSet(accessControlUserService.getEntries());
entries.addAll(accessControlGroupService.getEntries());
返回条目;
}
public void accessLevelChanged(ValueChangeEvent ValueChangeEvent){
XspInputRadio组件=(XspInputRadio)valueChangeEvent.getComponent();
System.out.println(“phaseId:+valueChangeEvent.getPhaseId());
System.out.println(“accessLevelChanged”);
System.out.println(component.getGroupName());
System.out.println(“oldValue:+valueChangeEvent.getOldValue());
System.out.println(“newValue:+valuechangevent.getNewValue());
}
}
AccessControlEntry:

public class AccessControlEntry implements Comparable<AccessControlEntry> {

    // Enumerations

    public static enum AccessLevel {
        READACCESS, 
        EDITACCESS,
        FULLACCESS;
    }

    // Fields

    private String name;
    private AccessLevel accessLevel;
    private boolean accessLevelRestricted = false;

    // Constructors

    public AccessControlEntry(String name, AccessLevel accessLevel) {
        this.name = name;
        this.accessLevel = accessLevel;
    }

    // Getter & Setter

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public AccessLevel getAccessLevel() {
        return accessLevel;
    }

    public void setAccessLevel(AccessLevel accessLevel) {
        this.accessLevel = accessLevel;
    }

    // nessecary for EL (managed bean)
    public String getAccessLevelAsString() {
        return accessLevel.toString();
    }

    // nessecary for EL (managed bean)
    public void setAccessLevelAsString(String accessLevel) {
        this.accessLevel = AccessLevel.valueOf(accessLevel.toUpperCase());
    }

    // Operations

    public boolean isReadAccess() {
        return accessLevel == AccessLevel.READACCESS;
    }

    public void setEditAccess(boolean editAccessRestricted) {
        accessLevel = AccessLevel.EDITACCESS;
        accessLevelRestricted = editAccessRestricted;
    }

    public boolean isEditAccess() {
        return accessLevel == AccessLevel.EDITACCESS;
    }

    public boolean isEditAccessRestricted() {
        return isEditAccess() && accessLevelRestricted;
    }

    public void setFullAccess(boolean fullAccessRestricted) {
        accessLevel = AccessLevel.FULLACCESS;
        accessLevelRestricted = fullAccessRestricted;
    }

    public boolean isFullAccess() {
        return accessLevel == AccessLevel.FULLACCESS;
    }

    public boolean isFullAccessRestricted() {
        return isFullAccess() && accessLevelRestricted;
    }

    public int compareTo(AccessControlEntry aControlEntry) {
        return getName().compareTo(aControlEntry.getName());
    }

    @Override
    public String toString() {
        return getClass().getSimpleName() + ": name=\"" + name + 
                "\", accessLevel=\"" + accessLevel +
                "\", isEditAccessRestricted=\"" + isEditAccessRestricted() + 
                "\", isFullAccessRestricted=\"" + isFullAccessRestricted() + "\"";
    }

}
公共类AccessControlEntry实现可比较的{
//枚举
公共静态枚举访问级别{
读访问,
编辑访问,
完全访问;
}
//田地
私有字符串名称;
私有访问级别访问级别;
私有布尔accessLevelRestricted=false;
//建设者
公共AccessControlEntry(字符串名称,AccessLevel AccessLevel){
this.name=名称;
this.accessLevel=accessLevel;
}
//吸气剂和塞特
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共访问级别getAccessLevel(){
返回访问级别;
}
公共void setAccessLevel(AccessLevel AccessLevel){
this.accessLevel=accessLevel;
}
//EL的nessecary(托管bean)
公共字符串getAccessLevelAsString(){
返回accessLevel.toString();
}
//EL的nessecary(托管bean)
public void setAccessLevelAsString(字符串accessLevel){
this.accessLevel=accessLevel.valueOf(accessLevel.toUpperCase());
}
//操作
公共布尔值isReadAccess(){
返回accessLevel==accessLevel.READACCESS;
}
public void setEditAccess(布尔editAccessRestricted){
accessLevel=accessLevel.EDITACCESS;
accessLevelRestricted=editAccessRestricted;
}
公共布尔isEditAccess(){
返回accessLevel==accessLevel.EDITACCESS;
}
公共布尔值isEditAccessRestricted(){
返回isEditAccess()&&accessLevelRestricted;
}
public void setFullAccess(布尔fullAccessRestricted){
accessLevel=accessLevel.FULLACCESS;
accessLevelRestricted=fullAccessRestricted;
}
公共布尔值isFullAccess(){
返回accessLevel==accessLevel.FULLACCESS;
}
公共布尔值isFullAccessRestricted(){
return isFullAccess()&&accessLevelRestricted;
}
公共int比较(AccessControlEntry控件){
返回getName().compareTo(aControlEntry.getName());
}
@凌驾
公共字符串toString(){
返回getClass().getSimpleName()+“:name=\”“+name+
“\”,accessLevel=\”“+accessLevel+
“\”,isEditAccessRestricted=\“”+isEditAccessRestricted()
“\”,isFullAccessRestricted=\“”+isFullAccessRestricted()+“\”;
}
}
问题1: 更新:

您必须为repeat控件的每一行计算一个唯一的groupName

您必须为所有单选按钮计算一个通用的
groupName
。 还有一个问题,每个
xp:radio
控件都将使用自己的组名呈现,让我们看看呈现的html代码:

一种可能的解决方法是使用本机html:

<input id="radio1" type="radio" name="selection" value="#{viewScope.selected[rownumber]}">
</input>
AccessControlBean:

public class AccessControlBean implements Serializable {

    public Set<AccessControlEntry> getEntries() {

        Set<AccessControlEntry> entries = new TreeSet<AccessControlEntry>(accessControlUserService.getEntries());
        entries.addAll(accessControlGroupService.getEntries());

        return entries;
    }

    public void accessLevelChanged(ValueChangeEvent valueChangeEvent) {

        XspInputRadio component = (XspInputRadio) valueChangeEvent.getComponent();

        System.out.println("phaseId: " + valueChangeEvent.getPhaseId());

        System.out.println("accessLevelChanged");
        System.out.println(component.getGroupName());
        System.out.println("oldValue: " + valueChangeEvent.getOldValue());
        System.out.println("newValue: " + valueChangeEvent.getNewValue());

    }

}
公共类AccessControlBean实现可序列化{
公共集合getEntries(){
Set entries=new TreeSet(accessControlUserService.getEntries());
entries.addAll(accessControlGroupService.getEntries());
返回条目;
}
public void accessLevelChanged(ValueChangeEvent ValueChangeEvent){
XspInputRadio组件=(XspInputRadio)valueChangeEvent.getComponent();
System.out.println(“phaseId:+valueChangeEvent.getPhaseId());
System.out.println(“accessLevelChanged”);
System.out.println(component.getGroupName());
System.out.println(“oldValue:+valueChangeEvent.getOldValue());
System.out.println(“newValue:+valuechangevent.getNewValue());
}
}
AccessControlEntry:

public class AccessControlEntry implements Comparable<AccessControlEntry> {

    // Enumerations

    public static enum AccessLevel {
        READACCESS, 
        EDITACCESS,
        FULLACCESS;
    }

    // Fields

    private String name;
    private AccessLevel accessLevel;
    private boolean accessLevelRestricted = false;

    // Constructors

    public AccessControlEntry(String name, AccessLevel accessLevel) {
        this.name = name;
        this.accessLevel = accessLevel;
    }

    // Getter & Setter

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public AccessLevel getAccessLevel() {
        return accessLevel;
    }

    public void setAccessLevel(AccessLevel accessLevel) {
        this.accessLevel = accessLevel;
    }

    // nessecary for EL (managed bean)
    public String getAccessLevelAsString() {
        return accessLevel.toString();
    }

    // nessecary for EL (managed bean)
    public void setAccessLevelAsString(String accessLevel) {
        this.accessLevel = AccessLevel.valueOf(accessLevel.toUpperCase());
    }

    // Operations

    public boolean isReadAccess() {
        return accessLevel == AccessLevel.READACCESS;
    }

    public void setEditAccess(boolean editAccessRestricted) {
        accessLevel = AccessLevel.EDITACCESS;
        accessLevelRestricted = editAccessRestricted;
    }

    public boolean isEditAccess() {
        return accessLevel == AccessLevel.EDITACCESS;
    }

    public boolean isEditAccessRestricted() {
        return isEditAccess() && accessLevelRestricted;
    }

    public void setFullAccess(boolean fullAccessRestricted) {
        accessLevel = AccessLevel.FULLACCESS;
        accessLevelRestricted = fullAccessRestricted;
    }

    public boolean isFullAccess() {
        return accessLevel == AccessLevel.FULLACCESS;
    }

    public boolean isFullAccessRestricted() {
        return isFullAccess() && accessLevelRestricted;
    }

    public int compareTo(AccessControlEntry aControlEntry) {
        return getName().compareTo(aControlEntry.getName());
    }

    @Override
    public String toString() {
        return getClass().getSimpleName() + ": name=\"" + name + 
                "\", accessLevel=\"" + accessLevel +
                "\", isEditAccessRestricted=\"" + isEditAccessRestricted() + 
                "\", isFullAccessRestricted=\"" + isFullAccessRestricted() + "\"";
    }

}
公共类AccessControlEntry实现可比较的{
//枚举
公共静态枚举访问级别{
读访问,
编辑访问,
完全访问;
}
//田地
私有字符串名称;
私有访问级别访问级别;
私有布尔accessLevelRestricted=false;
//建设者
公共AccessControlEntry(字符串名称,AccessLevel AccessLevel){
this.name=名称;
this.accessLevel=accessLevel;
}
//吸气剂和塞特