Как установить a f:selectItem в определенной опции после действия a p:commandButton?

У меня есть код JavaScript, который очищает все p:inputText (после p:commandButton действие) формы. Проблема в том, что p:selectOneMenu все еще имеет f:selectItem выбрано в опциях это было выбрано. Мне нужно поставить значения в первом f:selectItem каждого p:selectOneMenu,

Как мне это сделать? Как я могу очистить выбранные значения?

Код сценария Java:

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

formularioAltas это идентификатор формы.

Код 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 ответа

Решение

Ответ Йозефа действительно ведет вас в правильном направлении, но, поскольку вы поделились некоторым кодом, я просто буду использовать его в своем ответе.

Во-первых, убедитесь, что ваша кнопка вызывает ваш метод bean-компонента и обновляет компонент selectOneMenu после его завершения. Несмотря на то, что здесь происходит какой-то ajax, Primefaces делает это для вас.

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

Атрибут update важен, так как он ищет компонент, идентификатор которого совпадает с указанным там. Так что вам нужно дать вашему selectOneMenu идентификатор. Если вам нужно обновить более одного компонента, вы можете добавить их идентификаторы в атрибут обновления, разделенные пробелом или запятой.

<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
}

Теперь я не совсем уверен, пойду ли я за тобой, но дай мне знать, поможет ли это тебе вообще. Это полностью 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)
}
Другие вопросы по тегам