相关疑难解决方法(0)

如何在SesionScoped bean中使用ViewScoped bean?

我有三个托管bean:一个作用域范围(S)和两个视图作用域(A,B).我想在S和B中使用A的功能,但问题是在会话范围内注入视图范围的bean是不可能的.

The scope of the object referenced by expression #{a}, view, is shorter than the referring managed beans (s) scope of session
Run Code Online (Sandbox Code Playgroud)

我不想复制A的功能.任何的想法?

jsf dependency-injection session-scope jsf-2 view-scope

2
推荐指数
1
解决办法
1623
查看次数

在新选项卡/窗口中打开链接,而不会丢失当前 JSF 页面的视图范围

我需要2.xhtml在当前 JSF 页面(例如1.xhtml)的新选项卡中打开一个新的JSF 页面(例如)。我应该使用哪个 JSF 组件?<h:commandLink>或者<h:outputLink>

1.xhtml单击链接以2.xhtml在新选项卡中打开后,我不想失去当前页面的范围。

的豆1.xhtml@ViewScoped。我应该把它改成@RequestScoped吗?

navigation jsf new-window view-scope

2
推荐指数
1
解决办法
7195
查看次数

如何将bean属性从一个视图传递到另一个视图

我正在使用JSF 2.1和Primefaces:

我有一个带有托管属性的视图作用域托管bean,以及一个在其他视图范围内的托管bean上设置内容并转发到引用该托管bean的其他页面的方法:

@ManagedBean
@ViewScoped
public class HelloMB {

   @ManagedProperty("otherMB")
   private OtherMB other;

   public String changeOtherMB() {
      otherMB.setAnyObject(new Object());
      return "otherPage.xhtml";
   }

}

@ManagedBean
@ViewScoped
public class OtherMB {

   private Object o;    

   public void setAnyObject(Object o) {
      this.o = o;
   }

}
Run Code Online (Sandbox Code Playgroud)

因此,当渲染otherPage时o为null.

你知道我怎么能解决这个问题?如何在@ViewScoped托管bean中保留对象并将其保存在其他页面上而不使用@SessionScoped

jsf parameter-passing managed-bean view-scope

2
推荐指数
1
解决办法
4183
查看次数

ui中的输入组件:重复,如何保存提交的值

我正在显示数据库中的问题列表,每个问题我都要显示一个选项列表,在本例中是单选按钮.

<ui:repeat value="#{formData.questions}" var="question">
    <div>
        <p:outputLabel value="#{question.name}" />
        <p:selectOneRadio value="#{formData.selectedOption}">
            <f:selectItems value="#{formData.options}" />
        </p:selectOneRadio>
    </div>
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)

我需要为每个问题保存选中的选项.

我怎样才能做到这一点?

jsf input uirepeat

2
推荐指数
1
解决办法
1364
查看次数

使用JSF Faces Flow而不是普通导航系统的优点

我正在探索JSF 2.2 Faces Flow功能,但我仍然不确定使用Faces Flow定义流程而不是使用普通导航系统(在链接或按钮中调用facelets)有什么好处?

jsf jsf-2.2 faces-flow

2
推荐指数
1
解决办法
3538
查看次数

使用JSF 2.2 inputFile将文件写入磁盘

我正在尝试使用h:inputFile标记上传图像文件并将其写入磁盘.

我的JSF代码:

<h:form id="fileUploadForm" enctype='multipart/form-data' prependId="false">
   <h:inputFile value="#{solicitacaoManagedBean.imagemCarregada}" />
   <br />
   <h:commandButton styleClass="btn btn-primary " value="Enviar" action="#{solicitacaoManagedBean.enviarImagem}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)

我的ManagedBean:

@Named(value = "solicitacaoManagedBean")
@SessionScoped
@MultipartConfig(location = "/home/rogerio/tmp/")
public class SolicitacaoManagedBean implements Serializable {

   private Part imagemCarregada;
Run Code Online (Sandbox Code Playgroud)

(......)

   public void enviarImagem() throws IOException {
      try {
         imagemCarregada.write("teste.jpg");
      } catch (IOException ioe) {
         System.out.println("Erro ao escrever: " + ioe.getLocalizedMessage());
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

据推测,方法write将项目上传到磁盘,IOException也不会被抛出/捕获.

file-io jsf file-upload jsf-2.2

1
推荐指数
1
解决办法
7316
查看次数

EL#{bean.id}如何调用托管bean方法bean.getId()

我真的不理解吸气剂和塞特剂的工作原理,尽管这是一个基本概念。我有以下代码,该属性如何id发送到Managed Bean?用getter方法捕获了吗?

我的面

<p:inputText id="id" value="#{bean.id}">
Run Code Online (Sandbox Code Playgroud)

我的托管豆

private String id;

public void setId(String id) {
    this.id = id;
}

public String getId() {
      return id;
}
Run Code Online (Sandbox Code Playgroud)

getter jsf el

1
推荐指数
1
解决办法
6446
查看次数

JSF bean动作方法返回字符串测试

我试图从这个问题中理解在JSF动作中返回null和""之间的区别,但是无法实际体验.

以下是OP的报价

据我所知,当JSF操作返回""(空字符串)时,用户会保留在当前页面上,但视图会刷新.但是,当操作返回null时,用户仍然停留在当前页面上,但旧视图将被重用

我在理解返回的区别混淆"",null"viewid?faces-redirect=true"从JSF支持bean.我试图通过一个小例子来理解差异,但我无法体验到实际的差异.以下是我的示例的代码片段.

web.xml中

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <display-name>Jsf Questions</display-name>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.jspx</param-value>
  </context-param>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/jsfintroapp/*</url-pattern>
  </servlet-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)

faces-config.xml中

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xi="http://www.w3.org/2001/XInclude"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
 <managed-bean>
  <managed-bean-name>userLogin</managed-bean-name>
  <managed-bean-class>com.srk.beans.UserLogin</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
 </managed-bean>
 <navigation-rule>
  <description>Contains list of all navigation rules here</description>
  <from-view-id>/*</from-view-id>
  <navigation-case>
   <display-name>WELCOME</display-name>
   <from-outcome>welcome</from-outcome>
   <to-view-id>/geek_examples/authorized_user.jspx</to-view-id>
  </navigation-case>
</faces-config>
Run Code Online (Sandbox Code Playgroud)

我的托管bean是一个请求范围的bean,如上所述.

UserLogin.java(Backing bean)代码片段

public String saveData() {
    //String returnString …
Run Code Online (Sandbox Code Playgroud)

navigation jsf jsf-1.2

1
推荐指数
1
解决办法
4340
查看次数

@ApplicationScoped Bean被构造多次

我有两个托管Java Bean:

import javax.annotation.PostConstruct;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;

import javax.ws.rs.Path;

@Path("/sync")
@ManagedBean(name="syncService", eager=true)
@ApplicationScoped
public class SyncService {
    @ManagedProperty(value="#{ldapDirectoryAccess}")
    private DirectoryAccess directoryAccess;

    public void setDirectoryAccess(DirectoryAccess directoryAccess) {
        System.out.println("SyncService.setDirectoryAccess()");
        this.directoryAccess = directoryAccess;
    }

    public SyncService() {
        System.out.println("SyncService() - constructed: " + this);
    }

    @PostConstruct
    public void init() {
        System.out.println("DirectoryAccess injected: " + directoryAccess + " in: " + this);
    }
    ...
}

@ManagedBean(name="ldapDirectoryAccess", eager=true)
@ApplicationScoped
public class LdapDirectoryAccess implements DirectoryAccess {
    public LdapDirectoryAccess() {
        System.out.println("LdapDirectoryAccess constructed: " + this); …
Run Code Online (Sandbox Code Playgroud)

jsf dependency-injection managed-bean

1
推荐指数
1
解决办法
576
查看次数

每个浏览器选项卡JSF一个会话

我正在使用我的JSF应用程序进行一些测试,当我在不同选项卡上的相同Web浏览器中尝试它时,在所有选项卡中最后一个会话都存在.

我怎么能阻止这个?

session jsf

0
推荐指数
1
解决办法
4732
查看次数

处理后退按钮和生成的Phase_ID

我遇到以下情况:

  1. JSF(MyFaces 2.1.7和RichFaces 3.3.3)
  2. 会话Scoped Bean TEST_PAGE
  3. 将使用BACK按钮结束的用户
  4. 服务器上的状态保存

场景:

  • 用户单击链接以导航到具有Session Scoped bean的页面(TEST_PAGE)
  • 用户单击另一个链接
  • 用户按下brwoser的按钮,将它们放回TEST_PAGE
  • 用户尝试在此页面中搜索

在搜索时,支持bean会抛出异常,因为有很多null值.原因是,当他们按下"搜索"时,页面处于RESTORE_VIEW同步状态.

我尝试在页面上禁用缓存,强制用户刷新后退按钮上的页面,但是很多用户抱怨"为什么我不能使用后退按钮,我之前可以做到!" 由于他们认为应用程序在"确认表单重新提交"页面chrome/IE/Firefox show中崩溃,导致帮助台门票,因此管理人员希望我寻找替代方案.

我的问题:

可以检测RESTORE_VIEW的当前Phase_ID,而不是在此阶段进行任何处理以避免异常,但仅此一点,只需重新调整即可为用户提供部分页面视图.是否可以RENDER_RESPONSE在此方案中放入页面然后进行处理?这应该刷新页面.

问题第2部分

由于推荐(或普通/良好)实用是禁用动态页面上的缓存,我已经这样做了,并且必须重新教育顽固的用户.

但是我有以下问题.

当按下具有禁用缓存的页面上的"返回"按钮时,浏览器会显示"确认表单重新提交"(chrome),用户可以按Refresh / F5Enter键.

如果Refresh/ F5是动作,一切都可以,我检测到RESTORE_VIEW相位并避免在该阶段中进行任何处理并让处理在RENDER_RESPONSE阶段完成.但是,如果Enter按下,则PhaseID处于,RENDER_RESPONSE(6)但是几个下拉控件的值为null,这会导致页面失败.所以我进行检查以检测这些情况并显示FaceMessage以告诉用户刷新页面.

问题是,我可以强制页面刷新而不是强制用户这样做吗?此页面的导航案例格式为:

     <navigation-rule>
      <navigation-case>
       <from-outcome>/app/ord/r1</from-outcome>
       <to-view-id>/jsp/ordersHistory.jsp</to-view-id>
      </navigation-case>
     </navigation-rule>
Run Code Online (Sandbox Code Playgroud)

我已经看到在线代码片段faces-redirect=true用于强制重新加载页面,但我无法让它工作!有什么建议?

jsf jsf-2

0
推荐指数
1
解决办法
2553
查看次数

@SessionScoped是一个好习惯吗?

我已经阅读了范围(@SessionScoped, @ViewScoped, @ApplicationScope and @RequestScope)类型之间的所有差异,但是,我仍然在某种程度上遇到应用程序问题。我有一个page-1 与网格和我所选择的项目发送到page-2(两者page-1page-2用相同的支持bean),以进行编辑,然后持续存在。据我所知,我的托管bean正在使用@RequestScopedjavax.faces.bean.RequestScoped这是理想的使用范围,但是它不起作用,bean被破坏了,数据丢失了。

恢复该故事,我将注释更改为@SessionScoped并且可以正常工作,但是我想知道这是否是一个好习惯?因为我已经读到,使用这种方法不是一个好习惯,@SessionScoped因为在客户端注销之前数据将一直保持活动状态。

jsf session-scope scopes

0
推荐指数
1
解决办法
6614
查看次数