Java 当“输入”时存储inputText值;“跳跃”;从一个控制器到另一个控制器

Java 当“输入”时存储inputText值;“跳跃”;从一个控制器到另一个控制器,java,jsf-2,Java,Jsf 2,我有以下掩码/视图: 输入名称和描述后,我可以通过单击“添加现有”按钮添加现有属性的列表。 这将打开另一个遮罩/视图,我可以在其中从现有阁楼列表中进行选择。这个(新的)遮罩/视图也有自己的控制器和模型 当我完成选择后,我有另一个按钮将我带回这个面具 问题是,当我返回时,name和description字段是空的。 这是因为当我单击“添加现有按钮”时,不会调用此掩码的控制器/模型,也不会存储值 如何避免这种情况并存储值 谢谢你的帮助 Francesco仅当新视图位于同一视图内时,此选项才有效。例

我有以下掩码/视图:

输入名称和描述后,我可以通过单击“添加现有”按钮添加现有属性的列表。 这将打开另一个遮罩/视图,我可以在其中从现有阁楼列表中进行选择。这个(新的)遮罩/视图也有自己的控制器和模型

当我完成选择后,我有另一个按钮将我带回这个面具

问题是,当我返回时,name和description字段是空的。 这是因为当我单击“添加现有按钮”时,不会调用此掩码的控制器/模型,也不会存储值

如何避免这种情况并存储值

谢谢你的帮助
Francesco

仅当新视图位于同一视图内时,此选项才有效。例如,当它是由隐藏的
而不是普通的
窗口显示的覆盖对话框时。open()
弹出窗口。这样,bean就可以互相访问,您就可以执行ajax更新,而不是提交/刷新整个页面


如果您不太熟悉HTML/CSS/JS,这对于homegrow来说相当复杂。我建议查看一个组件库,它提供像and这样的组件。

只有当新视图位于同一视图中时,这才有效。例如,当它是由隐藏的
而不是普通的
窗口显示的覆盖对话框时。open()
弹出窗口。这样,bean就可以互相访问,您就可以执行ajax更新,而不是提交/刷新整个页面


如果您不太熟悉HTML/CSS/JS,这对于homegrow来说相当复杂。我建议查看一个组件库,它提供了像和这样的组件。

您可以在会话或会话bean中存储数据。 当用户在多个选项卡/窗口中工作时,会话bean方法有一个巨大的缺点——他只使用一个会话bean,所以他覆盖了他在其他窗口中所做的事情


会话范围bean解决了这个问题。但会话范围不在JavaEE5中,而是在CDI(EE6的一部分)中。

您可以将数据存储在会话或会话bean中。 当用户在多个选项卡/窗口中工作时,会话bean方法有一个巨大的缺点——他只使用一个会话bean,所以他覆盖了他在其他窗口中所做的事情


会话范围bean解决了这个问题。但对话范围不在JavaEE5中,而是在CDI(EE6的一部分)中。

JSF1.x还是2.x?组件库?JSF2.0和标准/核心组件JSF1.x还是2.x?组件库?JSF2.0和标准/核心组件感谢您的回答。您对此有何看法:我认为我可以在应用请求阶段内执行重定向。当我单击“添加现有”按钮时,我设置了一个标志并重新加载页面,以便将值存储在模型中。在侦听器中,我捕获应用请求阶段,检查标志并执行重定向。你觉得这样行吗?(请记住,我对JSF非常陌生,所以请原谅我告诉bull@@it;)–类似这样的:
public void afterPhase(PhaseEvent事件){System.out.println(“After Phase->”+event.getPhaseId());ExternalContext ctx=FacesContext.getCurrentInstance().getExternalContext();if(“createRedirect.equalsIgnoreCase(ctx.getRequestParameterMap().get(“mode”){try{ctx.redirect(“businessObjectAttributeSpecificationListView.xhtml”);}catch(IOException e){e.printStackTrace();}}
确实有你建议的方法,但这显然很笨拙。我真的建议使用overlay div。这样,只需将bean作为托管属性相互连接起来,就可以轻松得多,而不必修改请求参数,甚至会话范围,也不必记住已经输入的数据。谢谢你的回答。你认为呢k关于这一点:我认为我可以在应用请求阶段内进行重定向。当我单击“添加现有”按钮时,我设置了一个标志并使页面重新加载,以便将值存储在模型中。在侦听器中,我捕获应用请求阶段,检查标志并进行重定向。你认为这是否可行?(请记住,我对JSF非常陌生,所以请原谅我告诉bull@@it;)–类似这样的:
public void afterPhase(PhaseEvent事件){System.out.println(“After Phase->”+event.getPhaseId());ExternalContext ctx=FacesContext.getCurrentInstance().getExternalContext();if(“createRedirect.equalsIgnoreCase(ctx.getRequestParameterMap().get(“mode”){try{ctx.redirect(“businessObjectAttributeSpecificationListView.xhtml”);}catch(IOException e){e.printStackTrace();}}
确实有你建议的方法,但这显然很笨拙。我真的建议使用overlay div。这样一来,只需将bean作为托管属性相互连接起来就更容易了,而不必修改请求参数,甚至会话范围,也不必记住已经输入的数据。