如何在p:commandButton操作后在特定选项中设置f:selectItem?

时间:2014-05-28 19:26:17

标签: java jsf primefaces selectonemenu

我有一个javascript代码,可以清除表单中的所有p:inputTextp:commandButton操作后)。问题是,p:selectOneMenu仍然在选中的选项中选择了f:selectItem我需要将值放在每个f:selectItem的第一个 p:selectOneMenu中。

我该怎么办?如何清除所选值?

java脚本代码:

            <script type="text/javascript">
                function limpiarForm()
                {
                    document.getElementById("formularioAltas").reset();
                }
            </script>

formularioAltas是表单ID。

p:commandButton的代码:

<p:commandButton value="Guardar" action="#{altasBean.agregarRefaccion()}" oncomplete="limpiarForm()" />

并且该代码未重置(我不想清除值,我只想选择第一个选项)p:selectOneMenu

的值

这是:

<h:outputText value="Estado de la refacción" />
    <p:selectOneMenu value="#{altasBean.refaccion.estado}">
        <f:selectItem itemLabel="..." itemValue="0" />
        <f:selectItem itemLabel="Ok" itemValue="Ok" />
        <f:selectItem itemLabel="Reparar" itemValue="Reparar" />
        <f:selectItem itemLabel="Sospechoso" itemValue="Sospechoso" />
    </p:selectOneMenu>

豆子:

private RefaccionBean refaccion = null;
/**
 * Get the value of refaccion
 *
 * @return the value of refaccion
 */
public RefaccionBean getRefaccion() {
    return refaccion;
}

/**
 * Set the value of refaccion
 *
 * @param refaccion new value of refaccion
 */
public void setRefaccion(RefaccionBean refaccion) {
    this.refaccion = refaccion;
}

public void agregarRefaccion() {
   I did a lot of things here...
   And after those things i clear the p:inputText with the javascript code
   -> After that i want to set the values of the p:selectOneMenu in the fist f:selectItem
}

2 个答案:

答案 0 :(得分:0)

现在我不完全确定我是否会关注你,但请告诉我这是否对你有所帮助。它完全是JSF,我投入了一些ajax。你仍然可以使用你的javascript。

前端:

<p:inputText id="input" value="#{bean.value}" />

<p:commandButton value="button" action="#{bean.action}">
   <f:ajax execute="input" render="output" />
</p:commandButton>

<p:selectOneMenu id="output" value="#{bean.placeValue}">
   <f:selectItems value="#{bean.values}" />
</p:selectOneMenu>

豆:

@ManagedBean
@RequestScoped
public class Bean {

    private String value;
    private List<String> values; 

    @EJB
    private ValueService valueService;

    @PostConstruct
    public void init() {
        values = valueService.list();
    }

    public void action() {
        // ... Action taken
    }

    public String placeValue() {
        // ... Validation and clear desired values
        return value;
    }


    // ... (getters, setters, etc)
}

答案 1 :(得分:0)

Josef的回答确实引导您朝着正确的方向前进,但由于您共享了一些代码,我将在答案中使用它。

首先,确保您的按钮调用您的bean方法并在完成后更新selectOneMenu组件。虽然这里有一些ajax,但是primefaces会为你抽象出来。

<p:commandButton value="Guardar" action="#{altasBean.agregarRefaccion}" update="selectOneMenu" />

update属性非常重要,因为它将查找id与其中指定的内容匹配的组件。所以你需要给你的selectOneMenu一个id。如果需要更新多个组件,可以将其id添加到由空格或逗号分隔的update属性中。

<h:outputText value="Estado de la refacción" />
<p:selectOneMenu value="#{altasBean.refaccion.estado}" id="selectOneMenu">
    <f:selectItem itemLabel="..." itemValue="0" />
    <f:selectItem itemLabel="Ok" itemValue="Ok" />
    <f:selectItem itemLabel="Reparar" itemValue="Reparar" />
    <f:selectItem itemLabel="Sospechoso" itemValue="Sospechoso" />
</p:selectOneMenu>

现在只需要在操作方法中清理您的值:

public void agregarRefaccion() {
   //If you have other values to clean, clean them here
   this.refaccion.estado="0"; //Matches the value for your first item
}