需要xpages dojo验证文本框

需要xpages dojo验证文本框,xpages,xpages-extlib,Xpages,Xpages Extlib,我在xpage中有dojo验证文本框,其所需属性已计算(动态计算),如下所示 这里的组件SynCboxGrp是单选按钮。根据单选按钮值,文本框是必需的。但它不能正常工作。更改单选按钮值不会更改所需的行为 谢谢你的帮助 更新 谢谢斯特维塞尔、佩尔·亨里克·劳斯滕和埃里克。 我只在required属性中有此ssjs <xe:djValidationTextBox id="UBOCAgent" value="#{dsRacDoc.UBOCAgent}"

我在xpage中有dojo验证文本框,其所需属性已计算(动态计算),如下所示

这里的组件SynCboxGrp是单选按钮。根据单选按钮值,文本框是必需的。但它不能正常工作。更改单选按钮值不会更改所需的行为

谢谢你的帮助


更新


谢谢斯特维塞尔、佩尔·亨里克·劳斯滕和埃里克。 我只在required属性中有此ssjs

<xe:djValidationTextBox id="UBOCAgent"                      value="#{dsRacDoc.UBOCAgent}"                       disableClientSideValidation="true">
<xe:this.required><![CDATA[#{javascript:var syn = getComponent("SynCboxGrp").getValue();

if (syn == "Yes")
{
    return true;
}else{
    return false;
}
}]]></xe:this.required>
</xe:djValidationTextBox>  

我还在单选按钮onclick event
XSP.partialRefreshGet(“#{id:UBOCAgent}”)上尝试了这个部分刷新代码

这仍然不能改变行为。它基于初始单选按钮值工作。消极的一面是,由于它是一个get请求,它会从服务器更新字段内容。我还尝试了Eric的建议,禁用客户端验证,但没有帮助

Eric,我也尝试尽可能使用CSJS,但在这种情况下,所需的属性只有SSJS选项。所以不知道如何尝试CSJS。我是否应该尝试创建自己的dojo字段,而不是使用entension库中的dojo字段?如果是这样的话,我不知道如何计算它所需的属性。如果你能帮我一些示例代码,那将是很大的帮助。 谢谢您的时间。

两件事之一:

  • 如前所述,要触发SSJS值更改,请确保部分(至少)刷新包含上述代码的元素;可以使用容器元素来完成。另外,检查字段的disableClientSideValidation参数是否已设置(所有属性视图)
  • 将您的SSJS代码(它只返回一个Yes或nother的二进制评估,我假设No,值)转换为CSJS
  • 最近,在我当前项目的初步开发之后,为了减少服务器端回调,我开始支持CSJS方法;尤其是在我只想显示/渲染组件的情况下。如果您使用这种方法,请记住dojo.byId(“#{id:myControlsServerNameHere}”).value(对于文本字段,请参阅下面的单选按钮值)与设置或CSS属性相结合可能非常方便。如文档所述,如果您希望它存在于页面上但不显示(出于格式化目的,也可以保留默认值),请转到可见性路径,否则显示属性

    我目前使用的CSJS无线电值如下所示:

    var result=null;
    for(i=0; i<document.forms[0].elements.length;i++){
        if(document.forms[0].elements[i].name=="#{id:serverNameOfRadioElement}"){
            if(document.forms[0].elements[i].checked == true){
                result=document.forms[0].elements[i].value;
                break;
            }
        }
    }
    //then handle your result, either with an if, or switch statement
    
    var结果=null;
    
    对于(i=0;i您正在执行partialRefreshGet,它正在更新Dojo验证文本框。但是您从未从单选中发回更新的值,因此单选按钮的服务器端值仍然是初始值。因此,required仍然为false

    在Dojo验证文本框中选中标记when required为true,但是验证会触发客户端,因此标记中应该有一个属性,如果这是您的首选路由,您可以通过CSJS操作该属性

    您是否有需要解决的特定延迟问题?如果您不了解clie,那么在回答这个问题和关于点击按钮查找数据库的另一个问题时,您会遇到一些问题。我不知道您在XPages开发方面的经验有多丰富,但这不是我推荐的方法nt端输出和服务器端组件树。XPage的初始页面加载速度也会变慢,传递到浏览器的HTML大小也会变大,这是因为传递到浏览器的CSJ太多

    我建议使用内置的部分刷新,除非浏览器到服务器的网络是一个重要问题,然后才回到编写自己的部分刷新发布数据子集的情况。根据我的经验,它更容易开发,更容易调试,更灵活


    对于此特定场景,无论您是自己编写部分刷新代码还是使用内置功能,有一点我不确定。在Dojo validation文本框上设置验证后,该验证将在客户端运行,并且可能会影响通过发布到服务器来取消设置所需属性的任何尝试。我尚未确定未测试,因此无法确定。

    请提供更多代码,完整(非)工作示例。服务器端代码不会在客户端的更改上执行。您是否已设置单选按钮以部分刷新文本框(以便重新计算所需的属性)正如Stephan所写,请添加更多的代码,以便于回答您的问题。谢谢stwissel,Per Henrik Lausten。
    var result=null;
    for(i=0; i<document.forms[0].elements.length;i++){
        if(document.forms[0].elements[i].name=="#{id:serverNameOfRadioElement}"){
            if(document.forms[0].elements[i].checked == true){
                result=document.forms[0].elements[i].value;
                break;
            }
        }
    }
    //then handle your result, either with an if, or switch statement