ভিউপ্যারাম বনাম @ ম্যানেজডপ্রপার্টি (মান = "# {প্যারাম.আইডি}")


97

এর মতো ভিউ প্যারাম সংজ্ঞায়নের মধ্যে পার্থক্য কী:

<f:metadata>
  <f:viewParam name="id" value="#{someBean.id}"/>
</f:metadata>

এবং ম্যানেজডবিনে এই জাতীয় সম্পত্তিটিকে সংজ্ঞায়িত করে:

@ManagedProperty(value = "#{param.id}")
private Integer id;

উত্তর:


144

<f:viewParam>:

  • আপডেট মডেল মান পর্যায়ের সময় মান সেট করে (যেহেতু এটি প্রসারিত হয় UIInput)।

  • সেট মান সময় পাওয়া যায় না @PostConstructতাই আপনি একটি অতিরিক্ত প্রয়োজন, <f:event type="preRenderView" listener="#{bean.init}" />ভিতরে <f:metadata>করতে আরম্ভের / সেট মান উপর ভিত্তি করে প্রিলোডিং। জেএসএফ ২.২ থেকে যেহেতু আপনি তার <f:viewAction>পরিবর্তে ব্যবহার করতে পারেন ।

  • নেস্টেড <f:converter>এবং <f:validator>আরও সূক্ষ্ম ধরণের রূপান্তর / বৈধতার জন্য মঞ্জুরি দেয় । এমনকি একটি <h:message>সংযুক্ত করা যেতে পারে।

  • কোনও ইউআরএলে প্যারামিটারের includeViewParamsবৈশিষ্ট্য <h:link>বা includeViewParams=trueঅনুরোধ ব্যবহার করে জিইটি কোয়েরি স্ট্রিং হিসাবে অন্তর্ভুক্ত করা যেতে পারে ।

  • বিনের সাথে ব্যবহার করা যেতে পারে @RequestScopedতবে এটি শিমটি হওয়া দরকার @ViewScopedযদি আপনি দৃশ্যের সাথে আবদ্ধ ফর্মগুলির কারণে কোনও বৈধতা ব্যর্থতা থেকে বেঁচে থাকার জন্য প্যারামিটারগুলি চান, অন্যথায় আপনাকে <f:param>কমান্ডের মাধ্যমে পরবর্তী অনুরোধগুলির জন্য সমস্ত অনুরোধের পরামিতিগুলি ম্যানুয়ালি ধরে রাখতে হবে উপাদান।

উদাহরণ :

<f:metadata>
    <f:viewParam id="user_id" name="id" value="#{bean.user}"
        required="true" requiredMessage="Invalid page access. Please use a link from within the system."
        converter="userConverter" converterMessage="Unknown user ID."
    />
</f:metadata>
<h:message for="user_id" />

সঙ্গে

private User user;

এবং একটি @FacesConverter("userConverter")Http://example.com/context/user.xhtml?id=123 দ্বারা পৃষ্ঠাটি চাওয়ানো idকনভার্টারের মাধ্যমে প্যারামিটারটি পাস করবে এবং Userবস্তুকে বিনের সম্পত্তি হিসাবে সেট করবে ।


@ManagedProperty:

  • শিম তৈরির সাথে সাথেই মান নির্ধারণ করে।

  • সেট মানটি উপলব্ধ থাকে @PostConstructযা সেট মানের উপর ভিত্তি করে অন্যান্য বৈশিষ্ট্যগুলির সহজ সূচনা / প্রিলোডিংয়ের অনুমতি দেয়।

  • ঘোষণামূলক রূপান্তর / বৈধতার দর্শন হিসাবে মঞ্জুরি দেয় না।

  • #{param}অনুরোধ সুযোগের চেয়ে বিস্তৃত সুযোগ সহ মটরশুটিতে পরিচালিত সম্পত্তির অনুমতি নেই, সুতরাং শিমটি হওয়া দরকার @RequestScoped

  • যদি আপনি #{param}পরবর্তী পোস্টের অনুরোধগুলিতে উপস্থিত থাকার কোনও পরিচালিত সম্পত্তি নির্ভর করেন তবে আপনাকে <f:param>এটি UICommandউপাদানগুলির মতো অন্তর্ভুক্ত করতে হবে ।

উদাহরণ :

@ManagedProperty("#{param.id}")
private Long id;

private User user;

@EJB
private UserService userService;

@PostConstruct
public void init() {
    user = userService.find(id);
}

কিন্তু আপনি বৈধতা নিজেকে পরিচালনা করতে, যখনই কোনো userহল nullপরিবর্তন ঘটানোর দ্বারা FacesContext#addMessage()বা কিছু।


উভয় এবং বাধ্যতামূলক হলে আপনি এগুলি উভয়ই ব্যবহার করতে পারেন । আপনি কেবল সূক্ষ্ম দানযুক্ত রূপান্তর / বৈধতা প্রয়োগ করতে পারবেন না।@PostConstructincludeViewParams


আরো দেখুন:


4
ব্যতিক্রমী ক্ষেত্রে অনুরোধের প্যারামিটারগুলি পুনরুদ্ধার করার জন্য অন্য বিকল্প রয়েছে: ফেসসকন্টেক্সট.সেটকন্টরআইনস্ট্যান্স ()। getExternContext ()। getRequestParameterMap () পান।
অ্যাঞ্জেলসারভেরা

4
@ অ্যাঞ্জেল: কেবলমাত্র যখন বিনের অনুরোধের স্কোপের চেয়ে বিস্তৃত সুযোগ থাকে যা @ManagedPropertyএকটি অনুরোধের পরামিতিটিকে অসম্ভব করে তোলে ।
বালুসসি

হাই @ বালুসসি আমি দ্বিতীয় পোস্টে ম্যানেজড প্রোপার্টি ব্যবহার করে প্যারাম.আইডি থেকে প্রাপ্ত আইডিটির মানের উপর নির্ভর করি। আমি এফ: প্যারাম ব্যবহার করে কীভাবে এটি অন্তর্ভুক্ত করতে পারি? অনেক অনেক ধন্যবাদ
sys_debug

4
@ থুফির: এটি আপডেট মডেলের মান পর্যায়ের সময় সেট করা আছে। পোস্টকাস্ট্রাক্ট এর আগে অনেক আগে চলে, সরাসরি শিমের নির্মাণ এবং নির্ভরতার ইনজেকশন পরে। এটি শ্রোতার পদ্ধতিতে পাওয়া যাবে যা <f:event type="preRenderView">আগত জেএসএফ ২.২ দ্বারা আহবান করা হয়েছে <f:viewAction>
বালুসসি


6

2 অন্যান্য পার্থক্য:

  • @ManagedPropertyকেবল জেএসএফ পরিচালিত মটরশুটি দিয়ে ব্যবহারযোগ্য, সিডিআই ( @Named) দ্বারা পরিচালিত মটরশুটি দিয়ে নয় ;
    • <f:viewParam> শুধুমাত্র জিইটি অনুরোধের পরামিতিগুলির সাথে কাজ করে।

4
Org.omnifaces.cdi.Param: অতএব আপনি টীকা ব্যবহার করতে পারে
dforce
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.