Zby*_*zek 6 jsf submit primefaces jsf-2
我的应用程序出现了奇怪的行为.命令按钮开始在第二次命中时调用操作.首先 - 什么都没发生.它对firefox和chrome有效,但在顿悟中照常工作.
我的环境: - ubuntu 11.04 - glassfish 3.1.1 - jsf 2.X - primefaces 3.2 - firefox 12.0 - 顿悟2.30.6
代码示例:
<ui:define name="content">
<h:form id="form">
<h:panelGrid id="panelGrid" columns="3">
<h:outputText value="#{msg.fieUserName}:"/>
<h:inputText id="name" value="#{userBb.editedUser.username}" />
<h:message for="name" styleClass="error_msg"/>
<h:outputText value="#{msg.fieUserDescription}:"/>
<h:inputText id="description" value="#{userBb.editedUser.description}" />
<h:message for="description" styleClass="error_msg"/>
<h:outputText value="#{msg.fieUserPassword}:"/>
<h:inputSecret id="password" value="#{userBb.editedUser.password}" redisplay="true"/>
<h:message for="password" styleClass="error_msg"/>
<h:outputText value="#{msg.fieUserRights}:"/>
<p:selectOneMenu id= "rights"
value= "#{userBb.editedUserGroup}"
converter="#{pGroupOfUsersConverter}">
<f:selectItems
value ="#{groupDao.findAll()}"
var ="row"
itemLabel="#{groupDao.rightsDescription(row.id)}"
itemValue="#{row.groupname}"
>
</f:selectItems>
</p:selectOneMenu>
<h:message for="rights" styleClass="error_msg"/>
<h:outputText value="#{msg.fiePorofolioName}:" rendered="#{userBb.chosenNew}"/>
<h:inputText id="portName" value="#{userBb.portfelForNewUser.nazwa}" rendered="#{userBb.chosenNew}">
<f:validateBean disabled="true" />
</h:inputText>
<h:message for="portName" styleClass="error_msg" rendered="#{userBb.chosenNew}"/>
<h:outputText value="#{msg.fiePotofolioCurrency}:" rendered="#{userBb.chosenNew}"/>
<p:selectOneMenu id= "waldep"
value= "#{userBb.portfelForNewUser.walutaDepozytowa}"
converter="#{igConverter}"
rendered= "#{userBb.chosenNew}"
>
<f:selectItems value= "#{igDao.waluty}"
var= "row"
itemLabel="#{row.nazwa}"/>
</p:selectOneMenu>
<h:message for="waldep" styleClass="error_msg" rendered="#{userBb.chosenNew}"/>
</h:panelGrid>
<h:panelGrid columns="2">
<h:commandButton value="#{msg.butCreate}" action="#{userBb.formCreate()}" rendered="#{userBb.chosenNew}" />
<h:commandButton value="#{msg.butSave}" action="#{userBb.formEdit()}" rendered="#{!userBb.chosenNew}"/>
<h:commandButton value="#{msg.butBack}" action="#{userBb.formBack()}"/>
</h:panelGrid>
</h:form>
</ui:define>
Run Code Online (Sandbox Code Playgroud)
在此示例方法中,仅在第二次单击命令按钮时调用userBb.formCreate(),尽管按钮可见.当字段未正确填充时,旁边会显示相应的消息,但是......仅在第二次单击时!有什么建议?
我查看点:这个建议,但找不到解决方案.
好的,我发现了什么问题.所以:
出现问题:
我有一个用户数据页面.一些输入项和命令按钮.单击"创建"按钮时,将检出输入数据.如果数据正常,则会创建用户并显示用户表,或者出现错误时 - 会显示错误消息并且用户停留在同一页面上:

我发现了一些不稳定的行为.第一次单击(操作)时没有任何操作,只有第二个和后续操作有效.但.此行为与我使用的Web浏览器类型有关.
所有动作都是从第一次点击开始,在webrowsers中:顿悟和konqueror.虽然在火狐和铬中我观察到了上面描述的这种不稳定的行为.命令按钮的代码是:
<h:commandButton value="#{msg.butCreate}" action="#{userBb.formCreate()}" rendered="#{userBb.chosenNew}"/>
Run Code Online (Sandbox Code Playgroud)
不同的webbrowsers中的不同行为.
原因. @Balusc在他的笔记中列举了原因,我大致是第一次阅读.确实是pt.7.
解决方案. 我试过这样改变按钮声明:
<h:commandButton value="#{msg.butCreate}" action="#{userBb.formCreate()}" rendered="#{userBb.chosenNew}">
<f:ajax render="userForm"/>
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)
其中userForm是h:form的正确id.没有结果,仍然只有第二次和后续点击有效 - 显示错误消息.
所以我改变了上一页的声明命令按钮,调用了不稳定的行为页面.最初它是:
<p:commandButton value="#{msg.butNew}" action="#{userBb.actionNew()}"/>
Run Code Online (Sandbox Code Playgroud)
primefaces命令按钮.就是这样,正如Balusc写道:"如果事先通过ajax请求呈现/更新了具有UICommand按钮的父级,那么第一个动作将始终失败."
所以我把声明改为:
<p:commandButton value="#{msg.butNew}" action="#{userBb.actionNew()}" ajax="false"/>
Run Code Online (Sandbox Code Playgroud)
就是这样.对于第一个操作,它在任何浏览器中都可以正常工作.
| 归档时间: |
|
| 查看次数: |
11382 次 |
| 最近记录: |