相关疑难解决方法(0)

何时使用valueChangeListener或f:ajax监听器?

以下两段代码之间有什么区别 - 关于listener放置?

<h:selectOneMenu ...>
    <f:selectItems ... />
    <f:ajax listener="#{bean.listener}" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

<h:selectOneMenu ... valueChangeListener="#{bean.listener}">
    <f:selectItems ... />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

ajax jsf listener valuechangelistener jsf-2

83
推荐指数
2
解决办法
9万
查看次数

如何在验证阶段隐藏JSF组件

我有3个列表框:第一个包含类型,第二个包含所选类型的子类型,第三个包含所选类型和子类型的元素.

<p:selectonelistbox id = "types" rendered = "true" valuechangelistener = "#{bean.selectType}" onchange = "submit()" />
<p:selectonelistbox id = "subtypes" rendered = "#{bean.subtypesFlag}" valuechangelistener = "#{bean.selectSubType}" onchange = "submit()" />
<p:selectonelistbox id = "elements" rendered = "#{bean.elementsFlag}" />


@viewscoped
...
private Boolean subtypesFlag = false;
private Boolean elementsFlag = false;
public void selectType(ValueChangeEvent  event) {
  subtypesFlag = true;
  elementsFlag = false;
}
public void selectSubType(ValueChangeEvent  event) {
  elementsFlag = true;
}
Run Code Online (Sandbox Code Playgroud)

始终显示第一个列表框,仅在选择某个类型时显示第二个列表框,仅在选择子类型时显示第三个列表框.

当我打开视图时,只渲染类型.然后我按某种类型,亚型变得可见.接下来我按下一些子类型,元素变得可见.一切都很好.

但是当我选择另一种类型时,我想只显示子类型,但没有元素列表框.我有一个问题.当我真正选择其他类型时,我可以看到所有三个列表框.当我再次按下另一种类型时,我只看到类型和子类型,没有元素列表框.

这似乎是一个有趣的事实,当在应用请求值阶段时,您的组件将标志设置为false并且在验证阶段(当调用值操作侦听器时)变为 …

jsf primefaces

3
推荐指数
1
解决办法
1004
查看次数

如何保存2个相关的selectOneMenu值

关于jsf相关的下拉选择,我在这里遇到了一个小问题.我有2个下拉选择:第一个是独立的,第二个显示结果依赖于这是代码:

<h:panelGroup id="addressPanel">        
        <h:outputLabel styleClass="label" value="Provincia: " />
        <h:selectOneMenu onchange="updateCombos()"
            value="#{indirizzoCtrl.codiceProvincia}"  >
            <f:selectItem itemValue="" itemLabel=""></f:selectItem>
            <f:selectItems value="#{indirizzoCtrl.allProvincia}" var="c"
                itemLabel="#{c.nome}" itemValue="#{c.siglaProvincia}" />
        </h:selectOneMenu>
        <h:outputLabel styleClass="label" value="Comune: " />
        <h:selectOneMenu 
            value="#{indirizzoCtrl.codiceComune}"  >
            <f:selectItem itemValue="" itemLabel=""></f:selectItem>
            <f:selectItems value="#{indirizzoCtrl.allComuni}" var="c"
                itemLabel="#{c.descrizione}" itemValue="#{c.codiceComune}" />

        </h:selectOneMenu>
    </h:panelGrid>
</h:panelGroup>
<p:remoteCommand name="updateCombos" update="addressPanel masterForm:msg"  />              
<p:commandButton styleClass="commandButton" value="Save"
    actionListener="#{indirizzoCtrl.save}">
</p:commandButton>
Run Code Online (Sandbox Code Playgroud)

好吧,当用户在选择了两个值后保存表单时,托管bean indirizzoCtrl(请求作用域)无法将第二个下拉列表的值映射回列表,因为没有列表.事实上,#{indirizzoCtrl.allComuni}只有在indirizzoCtrl.codiceProvincia!=null...更新模型阶段之前,才调用从数据库检索数据的getter .因此,第一次调用列表的getter时无法检索任何值,这会使更新模型阶段失败.我怎么能处理这个场景......我认为这是一个很常见的场景,所以我在这里遗漏了一些东西......

ajax jsf jsf-2

2
推荐指数
1
解决办法
1593
查看次数

如何在更改第一个selectOneMenu时加载第二个selectOneMenu?

我有2个<h:selectOneMenu>组件,其中一个取决于另一个组件的选择.当您选择的第一个菜单组件,然后用该事件的第二个变化的一个值onchange="submit()"valueChangeListener="#{Usuario.cmbDatos_action}"第一菜单:

<h:selectOneMenu id="cmbCombo" binding="#{Usuario.cmbDatos}" value="#{Usuario.id}" 
    onchange="submit()" valueChangeListener="#{Usuario.cmbDatos_action}">
    <f:selectItems value="#{beanCombos.datos}"></f:selectItems>
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

它就像所选国家的国家和城市.第一个菜单加载如下:

@ManagedBean
@RequestScoped
public class BeanCombos {

    private List<SelectItem> Datos;

    public BeanCombos() {
        try {
            clsConexion objConexion = new clsConexion();
            String strSQL = "SELECT * FROM Usuarios";            
            objConexion.ResultSetSQL = objConexion.EjecutarConsulta(strSQL);
            Datos = new ArrayList<SelectItem>();

            while (objConexion.ResultSetSQL.next()) {
                Usuario objUsuario = new Usuario();                
                objUsuario.setId(String.valueOf(objConexion.ResultSetSQL.getInt("Codigo")));
                objUsuario.setNombre(objConexion.ResultSetSQL.getString("Nombres").toUpperCase());
                Datos.add(new SelectItem(objUsuario.getId(), objUsuario.getNombre()));
            }
        } catch(Exception ex) {
            String strError = ex.getMessage().toString();            
        }
    }

    public List<SelectItem> getDatos() {
        return Datos; …
Run Code Online (Sandbox Code Playgroud)

jsf

2
推荐指数
1
解决办法
1万
查看次数

有条件地基于selectOneMenu值渲染组件

有没有办法根据用户从selectOneMenu组件中选择的当前值渲染组件?我的selectOneMenu组件填充了一个由两个值组成的枚举,吸烟者和非吸烟者.如果用户选择了吸烟者,我想在其下方呈现一个复选框,让用户检查他们每天抽烟的次数10,20,30 +等.如果用户选择非吸烟者,我也希望相反的工作即复选框不会渲染/消失.

jsf selectonemenu conditional-rendering

2
推荐指数
1
解决办法
9140
查看次数