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

Java 如何在p:commandButton操作后在特定选项中设置f:selectItem?,java,jsf,primefaces,selectonemenu,Java,Jsf,Primefaces,Selectonemenu,我有一个javascript代码,在表单的p:commandButton操作之后清除所有p:inputText。问题是p:SelectOne菜单在其所选的选项中仍选择了f:selectItem。我需要将这些值放在每个p:SelectOne菜单的第一个f:selectItem中 我该怎么做?如何清除选定的值 java脚本代码: <script type="text/javascript"> function limpiarForm

我有一个javascript代码,在表单的p:commandButton操作之后清除所有p:inputText。问题是p:SelectOne菜单在其所选的选项中仍选择了f:selectItem。我需要将这些值放在每个p:SelectOne菜单的第一个f:selectItem中

我该怎么做?如何清除选定的值

java脚本代码:

            <script type="text/javascript">
                function limpiarForm()
                {
                    document.getElementById("formularioAltas").reset();
                }
            </script>
代码不会重置我不想清除值,我只想把第一个选项选在p:SelectOne菜单的值上

这是:

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

现在我不完全确定我是否理解你,但请告诉我这是否对你有帮助。这完全是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>
豆子:


Josef的回答确实指引了你正确的方向,但是由于你分享了一些代码,我将在我的回答中使用它

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

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

是否要使用javascript清除值?你介意把你的代码发布到现在吗我用javascript清除了p:inputText。但是我想知道如何在第一个f:selectItem中设置p:selectOne菜单。我只想知道hot是怎么做的,不管是javascript还是其他什么。纯JSF应该更好。好吧,让我看看我能做些什么。我只需要清除action方法中需要的任何内容,并使用commandButton中的update属性更新受影响的组件。如果你发布你的xhtml和bean代码,我可以向你展示如何做到这一点。当然,让我把代码的一部分放进去:谢谢,这很有效。所以,如果我想在没有javascript的情况下清除所有表单,我必须对所有其他组件执行相同的操作?更新看起来像:update=component1 component2。。。组件我的意思是,我的表单中有很多组件,这是最好的方法吗?当我需要更新很多组件时,我只需要在它们周围包装一个面板,给它一个id并更新面板;所有的孩子都以这种方式更新。不过,在bean端,您必须手动清除每个值。但是您可以列出您提到的组件ID。如果我想清除所有表单,该怎么办?如何使用ajax?您可以将变量的值设置为null或在placeValue方法中设置。
<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)
}
<p:commandButton value="Guardar" action="#{altasBean.agregarRefaccion}" 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
}